SQL
SQL로 데이터 그룹화하기 | GROUP BY, HAVING, DISTINCT
sean11
2025. 1. 4. 09:00
반응형
그룹화하기
엑셀의 피벗 테이블처럼 데이터를 그룹화하고, 필터링 하는 기능은 GROUP BY와 HAVING을 통해 구현할 수 있다. 아래는 기본 형식이다.
SELECT [열] FROM [테이블]
WHERE [열] = [조건값]
GROUP BY [열]
HAVING [열] = [조건값]
여기서 GROUP BY로 열은 여러개를 지정할 수 있다. 다음 쿼리는 열1을 먼저 그룹화하고, 그다음 열2를 그룹화한다.
SELECT [열1], [열2] FROM [테이블]
GROUP BY [열1], [열2]
그룹화 열 데이터 개수 확인하기 (COUNT)
피벗 테이블처럼 그룹화는 집계 함수와 함께 사용하는데, 그룹별로 데이터 개수를 세는 방법은 COUNT 함수를 활용하면 된다. 다음 쿼리는 이를 구현한 것이며, AS cnt는 개수를 센 결과를 출력할 때 열 이름을 cnt로 한다는 뜻이다. 다만, cnt는 실제 데이터가 아니라 출력에만 활용되므로 GROUP BY나 HAVING에서 찾는 열에서는 활용할 수 없다. 최종적으로 출력할 때 개수에 따라 정렬까지 수행하였다.
SELECT [열], COUNT(*) AS cnt FROM [테이블]
GROUP BY [열]
ORDER BY COUNT(*)
데이터 필터링 하기 (HAVING)
그룹화 데이터 필터링을 위해서는 HAVING을 사용한다. WHERE와 차이점은 WHERE 문은 테이블에 있는 열에 적용하는 것이고, HAVING은 SELECT나 GROUP BY에 있는 열에만 적용 가능하다. 아래 예시는 그룹화 열 데이터 개수가 100 이상인 것만 조회하는 쿼리이다.
SELECT [열], COUNT(*) AS cnt FROM [테이블]
GROUP BY [열]
HAVING COUNT(*) >= 100
중복 데이터 제거하기 (DISTINCT)
GROUP BY는 그룹화를 통해 중복을 제거할 수 있지만, 이외에 SELECT DISTINCT를 통해 중복 데이터를 제거할 수 있다. 아래 기본 형식은 해당 열의 중복 데이터를 제거하른 쿼리이다. 다만, 집계하는데 활용하기에는 제한이 있다.
SELECT DISTINCT [열] FROM [테이블]
반응형