GROUP BY 절
GROUP BY 절 (GROUP BY Clause)
GROUP BY 절은 SELECT 절에서 집계를 수행할 때 사용할 그룹핑 컬럼을 지정해요. SELECT 절에 집계가 하나도 없어도 GROUP BY 절이 지정되면 쿼리는 항상 집계 쿼리가 돼요.
출처: 문서
본문
GROUP BY 절은 SELECT 절에서 집계를 수행할 때 어떤 그룹핑 컬럼을 사용할지 지정해요.
GROUP BY 절이 지정되면, SELECT 절에 집계가 없어도 쿼리는 항상 집계 쿼리가 돼요.
GROUP BY 절이 지정되면 그룹핑 컬럼에서 일치하는 데이터를 가진 모든 튜플(즉, 같은 그룹에 속하는 모든 튜플)이 결합돼요.
그룹핑 컬럼 자체의 값은 변하지 않고, 그 외의 컬럼은 집계 함수(count, sum, avg 등)로 결합할 수 있어요.
GROUP BY ALL
SELECT 문에서 집계 함수로 감싸지 않은 모든 컬럼에 대해 GROUP BY를 수행하려면 GROUP BY ALL을 사용해요.
이렇게 하면 컬럼 목록을 한 곳에서 유지할 수 있어 문법이 단순해지고, SELECT 세분성을 GROUP BY 세분성에 맞춰 유지해서(예: 중복 방지) 버그를 막아줘요.
아래 예시와 "Friendlier SQL with DuckDB" 블로그 글의 추가 예시를 참고해요.
다중 차원 (Multiple Dimensions)
일반적으로 GROUP BY 절은 단일 차원으로 그룹핑해요.
GROUPING SETS, CUBE, ROLLUP 절을 사용하면 여러 차원으로 그룹핑할 수 있어요.
자세한 내용은 GROUPING SETS 페이지를 참고해요.
예시 (Examples)
addresses 테이블에서 서로 다른 각 도시에 속하는 항목 수를 세기:
SELECT city, count(*)
FROM addresses
GROUP BY city;
도시별·street_name별 평균 수입 계산:
SELECT city, street_name, avg(income)
FROM addresses
GROUP BY city, street_name;
GROUP BY ALL 예시 (GROUP BY ALL Examples)
중복 값을 제거하려면 city와 street_name으로 그룹핑:
SELECT city, street_name
FROM addresses
GROUP BY ALL;
도시별·street_name별 평균 수입 계산. income은 집계 함수로 감싸져 있으므로 GROUP BY에 포함하지 않아요:
SELECT city, street_name, avg(income)
FROM addresses
GROUP BY ALL;
-- GROUP BY city, street_name:
문법 (Syntax)
더 알아보기 (Learn more)
- GROUPING SETS — 다중 차원 그룹핑.
- 집계 함수 — 그룹핑과 함께 쓰는 함수들.