SQL GROUP BY 문
- 이전 페이지 SQL sum()
- 다음 페이지 SQL Having
합계 함수(예: SUM)는 GROUP BY 문이 추가되어야 합니다.
GROUP BY 문
GROUP BY 문은 합계 함수와 함께 사용되어, 하나나 여러 개의 열에 따라 결과 집합을 그룹화합니다.
SQL GROUP BY 문법
SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name
SQL GROUP BY 예제
저희는 다음 "Orders" 테이블을 가지고 있습니다:
O_Id | OrderDate | OrderPrice | Customer |
---|---|---|---|
1 | 2008/12/29 | 1000 | Bush |
2 | 2008/11/23 | 1600 | Carter |
3 | 2008/10/05 | 700 | Bush |
4 | 2008/09/28 | 300 | Bush |
5 | 2008/08/06 | 2000 | Adams |
6 | 2008/07/21 | 100 | Carter |
이제 각 고객의 총 금액(총 주문)을 찾고자 합니다.
고객을 그룹화하려고 GROUP BY 문을 사용하고 싶습니다.
다음 SQL 문을 사용합니다:
SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer
결과 집합은 다음과 같습니다:
Customer | SUM(OrderPrice) |
---|---|
Bush | 2000 |
Carter | 1700 |
Adams | 2000 |
좋아 보이죠, 아닌가요?
그렇다면 GROUP BY를 제외한 경우 어떻게 될까요? 보여드리겠습니다:
SELECT Customer,SUM(OrderPrice) FROM Orders
결과 집합은 다음과 같습니다:
Customer | SUM(OrderPrice) |
---|---|
Bush | 5700 |
Carter | 5700 |
Bush | 5700 |
Bush | 5700 |
Adams | 5700 |
Carter | 5700 |
위의 결과 집합은 필요한 것이 아닙니다.
그렇다면 왜 위의 SELECT 문을 사용할 수 없습니까? 다음과 같이 설명합니다: 위의 SELECT 문은 두 열(고객과 SUM(OrderPrice))을 지정했습니다. "SUM(OrderPrice)"는 하나의 값( "OrderPrice" 열의 총 합)을 반환하며, "Customer"는 6 개의 값( "Orders" 테이블의 각 행에 대해 하나의 값)을 반환합니다. 따라서 올바른 결과를 얻을 수 없습니다. 그러나 그것을 보았습니다. GROUP BY 문이 이 문제를 해결했습니다.
다른 열 하나 이상에 GROUP BY
다른 열 하나 이상에도 GROUP BY 문을 적용할 수 있습니다. 예를 들어:
SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders GROUP BY Customer,OrderDate
- 이전 페이지 SQL sum()
- 다음 페이지 SQL Having