Computer Science/DB
GROUP BY
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;
- SELECT no, name, value FROM sample GROUP BY name; <- 되지않는다
반응형