GROUP BY 절
GROUP BY 절은 쿼리에 대한 그룹화 열을 식별합니다. 이는 테이블에서 나열된 모든 열에 같은 값이 있는 행을 그룹화하는 데 사용됩니다. 열이 나열된 순서는 중요하지 않습니다. 결과는 공통 값을 가진 각 행 세트를 그룹의 모든 행을 나타내는 하나의 그룹 행으로 결합하는 것입니다. GROUP BY를 사용하여 출력의 중복을 제거하고 그룹에 적용되는 집계를 계산합니다. 쿼리가 SUM, AVG 및 COUNT와 같은 표준 함수로 집계를 계산할 때 그룹화 열을 선언해야 합니다. 자세한 내용은 집계 함수 단원을 참조하십시오.
구문
[ GROUP BY expression [, ...] | ALL | aggregation_extension ]
여기서 aggregation_extension은 다음 중 하나입니다.
GROUPING SETS ( () | aggregation_extension [, ...] ) | ROLLUP ( expr [, ...] ) | CUBE ( expr [, ...] )
파라미터
- expression
-
열 또는 표현식의 목록은 쿼리의 선택 목록에 있는 비집계 표현식의 목록과 일치해야 합니다. 예를 들어, 다음과 같이 간단한 쿼리를 생각해 보세요.
select listid, eventid, sum(pricepaid) as revenue, count(qtysold) as numtix from sales group by listid, eventid order by 3, 4, 2, 1 limit 5; listid | eventid | revenue | numtix -------+---------+---------+-------- 89397 | 47 | 20.00 | 1 106590 | 76 | 20.00 | 1 124683 | 393 | 20.00 | 1 103037 | 403 | 20.00 | 1 147685 | 429 | 20.00 | 1 (5 rows)
이 쿼리에서 선택 목록은 2개의 집계 표현식으로 구성됩니다. 첫 번째 표현식은 SUM 함수를 사용하고 두 번째 표현식은 COUNT 함수를 사용합니다. 나머지 두 개의 열 LISTID 및 EVENTID를 그룹화 열로 선언해야 합니다.
GROUP BY 절에서 표현식은 서수를 사용하여 선택 목록을 참조할 수도 있습니다. 예를 들어, 이전 예는 다음과 같이 줄일 수도 있습니다.
select listid, eventid, sum(pricepaid) as revenue, count(qtysold) as numtix from sales group by 1,2 order by 3, 4, 2, 1 limit 5; listid | eventid | revenue | numtix -------+---------+---------+-------- 89397 | 47 | 20.00 | 1 106590 | 76 | 20.00 | 1 124683 | 393 | 20.00 | 1 103037 | 403 | 20.00 | 1 147685 | 429 | 20.00 | 1 (5 rows)
- ALL
-
ALL은 집계된 열을 제외하고 SELECT 목록에 지정된 모든 열을 기준으로 그룹화함을 나타냅니다. 예를 들어 GROUP BY 절에서 개별적으로 지정할 필요 없이
col1
및col2
를 기준으로 그룹화하는 다음 쿼리를 생각해 보겠습니다.col3
열은SUM
함수의 인수이므로 그룹화되지 않습니다.SELECT col1, col2 sum(col3) FROM testtable GROUP BY ALL
SELECT 목록에서 열을 제외하면 GROUP BY ALL 절은 해당 특정 열을 기반으로 결과를 그룹화하지 않습니다.
SELECT * EXCLUDE col3 FROM testtable GROUP BY ALL
- aggregation_extension
-
집계 확장 GROUPING SETS, ROLLUP 및 CUBE를 사용하여 단일 문에서 여러 GROUP BY 작업을 수행할 수 있습니다. 집계 확장 및 관련 기능에 대한 자세한 내용은 집계 확장을 참조하세요.
예시
다음 예에서는 salesid, listid, sellerid, buyerid, eventid, dateid, qtysold, pricepaid, commission, saletime 열이 포함된 SALES 테이블을 사용합니다. SALES 테이블에 대한 자세한 내용은 샘플 데이터베이스 섹션을 참조하세요.
다음 예시 쿼리는 GROUP BY 절에서 개별적으로 지정할 필요 없이 salesid
및 listid
를 기준으로 그룹화합니다. qtysold
열은 SUM
함수의 인수이므로 그룹화되지 않습니다.
SELECT salesid, listid, sum(qtysold) FROM sales GROUP BY ALL;
salesid | listid | sum --------+---------+------ 33095 | 36572 | 2 88268 | 100813 | 4 110917 | 127048 | 1 ...
다음 예시 쿼리는 SELECT 목록에서 여러 열을 제외하므로 GROUP BY ALL은 salesid와 listid만 그룹화합니다.
SELECT * EXCLUDE sellerid, buyerid, eventid, dateid, qtysold, pricepaid, commission, saletime FROM sales GROUP BY ALL;
salesid | listid --------+--------- 33095 | 36572 88268 | 100813 110917 | 127048 ...