gracelove91 2019. 12. 7. 15:39
반응형

GROUP BY

그룹화를 할 수 있다.
열에서 같은 값을 가진 행끼리 한데 묶어 그룹화한 집합을 집계함수로 넘겨줄 수 있다.

 

ex) SELECT * FROM sample;

no name value
1 A 1
2 A 2
3 B 10
4 C 3
5 NULL NULL

 

 

이때 그룹바이로 그룹화할 열을 지정한다. (복수로도 가능)

 

ex) SELECT COUNT(name) FROM sample GROUP BY name;

name COUNT(name)
A 2
B 1
C 1
NULL 0

이렇게 name의 열 값이 A,B,C,NULL 로 그룹화된 것을 볼 수 있다.

 

주의할점

  • WHERE 구의 조건식에서는 집계함수 사용 불가.
    • SELECT name, COUNT(name) FROM sample WHERE COUNT(name) = 1 GROUP BY name; <- 되지않는다
    • 내부처리순서 : WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY
    • WHERE구로 행을 검색하는 처리가 GROUP BY로 그룹화하는 처리보다 앞서기 때문에.
  • HAVING 구로 집계함수를 사용해서 조건식을 지정하자.
    • SELECT name, COUNT(name) FROM sample GROUP BY name HAVING COUNT(name) = 1;
    • GROUP BY에서 지정한 열 이외의 열은 집계함수를 사용하지 않은 채 SELECT 구에 지정할 수 없다.
      • SELECT no, name, value FROM sample GROUP BY name; <- 되지않는다
        • 그룹당 하나의 행이 결과로 반환. 그런데 name 열 값이 A인 그룹의 value열 값은 1과 2로 두개기 때문에 에러
      • SELECT MIN(no), name, SUM(value) FROM sample GROUP BY name;
반응형