mysql

[스크랩] ▣ [MySQL] 가로방향으로 통계(이차원집계)내기

네모세모네모 2012. 5. 9. 17:49

현재 레코드로 되어 있는 년도별 회비납부현황을 년도를 가로방향으로 놓은
이차원 집계.   항목이  년도(year), 금액(fee) 로 되어 있다

select aid,
      format(sum(if (year =1999,fee,0)),0) as 'y1999',
      format(sum(if (year =2000,fee,0)),0) as 'y2000',
      format(sum(if (year =2001,fee,0)),0) as 'y2001',
      format(sum(if (year =2002,fee,0)),0) as 'y2002',
      format(sum(if (year =2003,fee,0)),0) as 'y2003',
      format(sum(if (year =2004,fee,0)),0) as 'y2004',
      format(sum(if (year =2005,fee,0)),0) as 'y2005',
      format(sum(if (year =2006,fee,0)),0) as 'y2006'
FROM accounts_fee
GROUP BY aid


SELECT grade,
     format(sum(if(mid(jumin,8,1) ='1',1,0)),0) as 'male',
     format(sum(if(mid(jumin,8,1) ='2',1,0)),0) as 'female'
FROM member GROUP BY grade

주민번호를 이용하여 남자/여자별 통계를 구하는 sql 문장입니다.
위 문장은 grade 별 남여 통계를 구해 줍니다.
format(), sum(), mid() 함수가 다양하게 사용되었습니다.

여기서 한 가지 주의할 사항이 있습니다.
client 에서 결과 데이타를 처리할 때의 주의사항입니다.
위의 쿼리문을 실행하면 결과는 숫자로 보이지만 문자형식입니다.
결과가 1000 이상일 때 세자리마다 콤마가 찍히는 것을 확인해 보시면
알 수 있습니다.

따라서 단순히 숫자로 받고자 할 때에는 다음과 같이 합니다.
format() 함수를 사용하지 않는 것입니다.

SELECT grade,
     sum(if(mid(jumin,8,1) ='1',1,0)) as 'male',
     sum(if(mid(jumin,8,1) ='2',1,0)) as 'female'
FROM member GROUP BY grade

출처 : SQL with neXPice
글쓴이 : database 원글보기
메모 :