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 함수로 마무리 했다.
최종적으로 그룹함수로 처리하면 된다는 사실을 기억하자.
그리고 위의 이미지처럼 그 아래에 존재하는 항목들은 중간에 컨트롤 할 수 있다는 사실도 기억하자.