본문 바로가기

DEVELOPMENT/SQL

[SQL] GROUP BY

GROUP BY

 

*형식

SELECT * FROM 테이블명 GROUP BY 열1, 열2, ...

 

*예시

[sample1]

no name quantity
1 A 1
2 A 2
3 B 10
4 C 3
5 NULL NULL
-- GROUP BY 구에 name 열을 지정해 그룹화하기
SELECT name FROM sample1 GROUP BY name;
name
A
B
C
NULL

DISTINCT를 지정했을 때와 같은 결과가 나왔다. GROUP BY 구에 열을 지정하여 그룹화하면 지정된 열의 값이 같은 행이 하나의 그룹으로 묶인다. GROUP BY 구를 지정하는 경우에 집계함수와 사용하면 GROUP BY 구로 그룹화된 각각의 그룹이 하나의 집합으로서 집계함수의 인수로 넘겨진다.

-- GROUP BY 구와 집계함수를 조합
SELECT name, COUNT(name), SUM(quantity)
 FROM sample1 GROUP BY name;
name COUNT(name) SUM(quantity)
NULL 0 NULL
A 2 3
B 1 10
C 1 3

 

 

HAVING 구로 조건 지정

 

집계함수는 WHERE 구의 조건식에서는 사용할 수 없다. 

내부처리 순서가 WHERE → GROUP BY → HAVING → SELECT → ORDER BY 로 처리되므로 그룹화가 필요한 집계함수는 WHERE 구에서 지정할 수 없다.

HAVING 구를 사용하면 집계함수를 사용해서 조건식을 지정할 수 있다.

HAVING 구는 GROUP BY 구의 뒤에 기술하며 WHERE 구와 동일하게 조건식을 지정할 수 있다. 조건식에는 그룹별로 집계된 열의 값이나 집계함수의 계산결과가 전달된다고 생각하면 된다. 

-- WHERE 구에서는 집계함수를 사용X(에러)
SELECT name, COUNT(name) FROM sample1
 WHERE COUNT(name) = 1 GROUP BY name;
 
-- HAVING 구로 조건 지정
SELECT name, COUNT(name) FROM sample1
 GROUP BY name HAVING COUNT(name) = 1;
name COUNT(name)
B 1
C 1

 

 

 

 

'DEVELOPMENT > SQL' 카테고리의 다른 글

[SQL] 상관 서브쿼리  (0) 2023.05.30
[SQL] 서브쿼리  (0) 2023.05.30
[SQL] 집계함수  (0) 2023.05.30
[SQL] CASE 문  (0) 2023.05.30
[SQL] 날짜 연산  (0) 2023.05.30