그룹화(GROUP BY)

Taeha Kim·2020년 12월 3일
0

Database

목록 보기
7/8
post-thumbnail

GROUP BY

GROUP BY를 사용하여 그룹화를 할 수 있습니다.

nonamequantity
1A1
2A2
3B10
4C3
5NULLNULL

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;
nameCOUNT(name)SUM(quantity)
NULL0NULL
A23
B110
C13

조건 지정(HAVING)

그룹화를 하고나서 조건에 맞는 값을 검색하고 싶다면 HAVING을 사용합니다.

아래의 명령어는 name 열을 그룹화하고 행의 개수가 하나인 행을 가져옵니다.

SELECT name, COUNT(name) FROM table1 GROUP BY name HAVING COUNT(name) = 1;
nameCOUNT(name)
B1
C1

실제 그런지 확인해보면

중요! 그룹화를 하고 'WHERE'로 조건을 걸어서 값을 가져오면 안되는 이유

아래와 같이 WHERE을 사용하여 조건을 걸면 에러가 발생합니다.

SELECT name, COUNT(name) FROM table1 WHERE COUNT(name) = 1 GROUP BY name;

실제로 에러가 나는지 확인해 보면

에러가 발생하는 이유는 WHEREGROUP BY보다 먼저 실행되기 때문입니다.
따라서 그룹화를 하고 조건을 걸고 싶다면 HAVING 을 사용하도록 합시다.

profile
함께 성장하는 개발자가 되고 싶습니다.

0개의 댓글