GROUP BY
를 사용하여 그룹화를 할 수 있습니다.
no | name | quantity |
---|---|---|
1 | A | 1 |
2 | A | 2 |
3 | B | 10 |
4 | C | 3 |
5 | NULL | NULL |
table1이라는 테이블이 있다고 하고 name으로 그룹화를 해보면 다음과 같습니다.
SELECT name FROM table1 GROUP BY name;
name |
---|
A |
B |
C |
NULL |
table1에 name이라는 열에서는 A가 2개 있지만 그룹화를 하면 같은 지정된 열에서 하나의 값으로 행이 그룹화 합니다.
다음과 같이 GROUP BY를 사용하여 같은 값들의 합을 구할 수도 있습니다.
SELECT name, COUNT(name), SUM(quantity) FROM table1 GROUP BY name;
name | COUNT(name) | SUM(quantity) |
---|---|---|
NULL | 0 | NULL |
A | 2 | 3 |
B | 1 | 10 |
C | 1 | 3 |
그룹화를 하고나서 조건에 맞는 값을 검색하고 싶다면 HAVING
을 사용합니다.
아래의 명령어는 name 열을 그룹화하고 행의 개수가 하나인 행을 가져옵니다.
SELECT name, COUNT(name) FROM table1 GROUP BY name HAVING COUNT(name) = 1;
name | COUNT(name) |
---|---|
B | 1 |
C | 1 |
실제 그런지 확인해보면
아래와 같이 WHERE
을 사용하여 조건을 걸면 에러가 발생합니다.
SELECT name, COUNT(name) FROM table1 WHERE COUNT(name) = 1 GROUP BY name;
실제로 에러가 나는지 확인해 보면
에러가 발생하는 이유는 WHERE
이 GROUP BY
보다 먼저 실행되기 때문입니다.
따라서 그룹화를 하고 조건을 걸고 싶다면 HAVING
을 사용하도록 합시다.