반응형
저번 글에 이어서
SQL문 실습 - GROUP BY (3)
SQL문 실습 - GROUP BY (2)
SQL문 실습 - GROUP BY (1)
GROUP BY에 대해서 예제문제를 풀어보면서 알아보겠습니다.
1. CONVERT를 이용해서 OrderDate를 년별로 캐스팅하고, OrderDate, CustomerID별로 GROUP BY를 했습니다. 집계함수를 통해서 갯수, Freight의 합계, 최대값, 최소값을 구했습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | -- Use Orders -- Select OrderYY, CustomerID, OrderCount, TTL_Freight, MAX_Freight, MIN_Freight -- OrderYY = OrderDate change to YYYY -- OrderCount = Count of Orders by OrderYY, CustomerID -- TTL_Freight = Sum of Freight by OrderYY, CustomerID -- MAX_Freight = MAX of Freight in OrderYY, CustomerID -- MIN_Freight = MIN of Freight in OrderYY, CustomerID ------------------------------------------------------------------------------ SELECT CONVERT(NCHAR(4), OrderDate, 112) OrderYY ,CustomerID ,COUNT(*) OrderCount ,SUM(Freight) TTL_Freight ,MAX(Freight) MAX_Freight ,MIN(Freight) MIN_Freight FROM Orders GROUP BY CONVERT(NCHAR(4), OrderDate, 112), CustomerID ORDER BY CONVERT(NCHAR(4), OrderDate, 112) | cs |
- 결과 데이터
2. OrderDate와 ShippedDate를 빼서 ShipDayCount를 구하고 GROUP BY와 집계함수를 통해서 그 갯수를 구했습니다.
1 2 3 4 5 6 7 8 9 10 11 | -- Use Orders -- Select ShipDayCount, OrderCount -- ShipDayCount : Different between OrderDate and ShippedDate -- OrderCount : Count of Orders by ShipDayCount -- Sort by ShipDayCount(Descending) ------------------------------------------------------------------------------ SELECT DATEDIFF(DAY, ORDERDATE, SHIPPEDDATE) ShipDayCount ,COUNT(*) ShipDayCount FROM Orders GROUP BY DATEDIFF(DAY, ORDERDATE, SHIPPEDDATE) ORDER BY DATEDIFF(DAY, ORDERDATE, SHIPPEDDATE) DESC | cs |
- 결과 데이터
3. 이번에는 GROUP BY의 WHERE와 같은 역할을 하는 HAVING을 사용해서 GROUP BY에 조건을 걸어줍니다. CustomerID를 GROUP BY를 한 후 HAVING을 이용해서 그 갯수가 10이상인 데이터만 출력되게 조건을 걸었습니다.
1 2 3 4 5 6 7 8 9 10 11 12 | -- Use Orders -- Select CustomerID, OrderCount -- And Select OrderCount bigger or equal than 10 -- OrderCount : Count of Orders by CustomerID -- Use HAVING ------------------------------------------------------------------------------ SELECT CustomerID ,COUNT(*) OrderCount FROM Orders GROUP BY CustomerID HAVING COUNT(*) >= 10 ORDER BY COUNT(*) | cs |
- 결과 데이터
4. 위의 예제와 마찬가지로 HAVING을 사용해서 GROUP BY에 조건을 걸어줍니다.
1 2 3 4 5 6 7 8 9 10 11 12 | -- Use Orders -- Select EmployeeID, TTL_Freight -- And Select TTL_Freight smaller or equal than 1000 -- TTL_Freight : Sum of Freight by EmployeeID -- Use HAVING ------------------------------------------------------------------------------ SELECT EmployeeID ,SUM(Freight) TTL_Freight FROM Orders WHERE OrderDate >= '1996-01-01' AND OrderDate < '1997-01-01' GROUP BY EmployeeID HAVING SUM(Freight) <= 1000 | cs |
- 결과 데이터
5. COUNT(DISTINCT City)를 이용해서 중복되는 city를 제외한 갯수를 구할 수 있다.
1 2 3 4 5 6 7 8 | -- Use Customers -- Select Country, CountryCityCount -- CountryCityCount = Count of City(remove duplicate) by Country ------------------------------------------------------------------------------ SELECT Country ,COUNT(DISTINCT city) CountryCityCount FROM Customers GROUP BY Country | cs |
- 결과 데이터
GROUP BY예제는 여기까지가 끝입니다.
GROUP BY는 SQL문에서 많이 사용되고 처음 사용할때는 약간 헷갈리는 부분이 많으므로 잘 알아두는게 좋습니다.
다음 글에서는 지금까지 사용했던 것을 모두 사용하는 LevelUp Test를 풀어보겠습니다.
다음 글 : SQL문 실습 - LevelUpTest
참고 : SQL Server 기본SQL문 교육
반응형
그리드형
'프로그래밍 > MS-SQL' 카테고리의 다른 글
SQL문 실습 - CASE문(1) (0) | 2016.05.07 |
---|---|
SQL문 실습 - LevelUpTest (0) | 2016.04.17 |
SQL문 실습 - GROUP BY (3) (0) | 2016.04.17 |
DBMS의 데이터를 엑셀로 내보내기 (0) | 2016.04.17 |
엑셀의 데이터를 DBMS로 가져오기 (1) | 2016.04.17 |