toggle menu

GROUP BY 는 항상 어렵다

2012. 9. 12. 16:19 Database/Oracle

GROUP BY .. 일단 같은 그룹으로 묶어 버리는 명령이다.
묶이면 하나하나 컨트롤 할 수는 없고(아니 있을지도 ?ㅋㅋ)
최종적인 각 항목들은 그룹 함수로만 접근이 가능하다. 

요 최종적인 각 항목들은 그룹함수로만 접근 가능하다는 것이 핵심이다!!




SELECT B.ADMSEC_KNM,
       COUNT(DECODE(CHANG_Y, 2000, 1)) "2000년도",
       COUNT(DECODE(CHANG_Y, 2001, 1)) "2001년도"
FROM T_CMP A, V_ADMSEC01 B
WHERE SUBSTR(A.ZONE_C,0,5) = B.ADMSEC_CD
      AND CHANG_Y BETWEEN 2000 AND 2010
GROUP BY B.ADMSEC_KNM
ORDER BY B.ADMSEC_KNM


이건 각 지역구별로 업체의 수를 보여주는 쿼리이다.
이름을 위해서 두개의 테이블을 조인했는데, 그건 일상적인 것이니 패스.

중요한 것은 지역명을 기준으로 GROUP BY로 묶어 주었다는 것이고 이로인해
유일하게 출력할 수 있는 값은 B.ADMSEC_KNM 즉 지역명 뿐이다.

이 지역명을 중심으로 그룹으로 묶여 있다.


 

이런 모양세이다.

따라서 외적으로 드러나는 중구, 중랑구 등 지역명만 표시해줄 수 있고, 컬럼에 표시할 수 있는 다른 나머지는
그룹 함수로 처리된 것들이다.

앞서 말했듯이  최종적으로 그룹함수로 처리가 되었다면 컬럼 항목으로 출력될 수 있다는 것이다.
그래서 COUNT(*)을 사용해서 중구에 포함된 요소들의 갯수를 출력해 줄 수 있고,
혹은 SUM을 사용해서 더해줄 수 있는 거다.

위에서는 재미있게 각 항목들을 먼저 DECODE로 처리해준 후에 최종적으로 COUNT 함수로 마무리 했다.
최종적으로 그룹함수로 처리하면 된다는 사실을 기억하자.
그리고 위의 이미지처럼 그 아래에 존재하는 항목들은 중간에 컨트롤 할 수 있다는 사실도 기억하자.



 

Database/Oracle 관련 포스팅 더보기