- SQL문 실습 - LevelUpTest -
이전에 계속해서 SQL문에 대해서 공부했습니다.
이번에는 이전에 공부했던 SQL문들을 모두 활용해서 문제를 푸는
LevelUp Test를 풀어보겠습니다.
1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | --1.Use Orders -- Select OrderDate bigger or equal 1996-07 -- and OrderDate smaller or equal 1996-12 -- Select OrderYM, YM_Freight, YM_OrderCount column -- OrderYM = OrderDate change to YYYYMM -- YM_Freight = Sum of freight by OrderYM -- YM_OrderCount = Count of orders by OrderYM ------------------------------------------------------------------------------ SELECT CONVERT(NCHAR(6), OrderDate, 112) OrderYM, ,CONVERT(NUMERIC(12,4) ,SUM(Freight)) YM_Freight ,COUNT(*) YM_OrderCount FROM Orders WHERE OrderDate BETWEEN '1996-07-01' AND '1996-12-31' GROUP BY CONVERT(NCHAR(6), OrderDate, 112) | cs |
- 결과 데이터
-- SELECT CONVERT(NCHAR(6), OrderDate, 112) OrderYM,
--> CONVERT를 이용해서 날짜데이터인 OrderDate를 문자형으로 바꿔줍니다.
-- SUM(Freight) YM_Freight, COUNT(*) YM_OrderCount
--> 집계함수SUM을 이용해서 Freight의 합을 구하고, 집계함수COUNT를 이용해서 OrderDate의 월별 데이터 갯수를 계산합니다.
-- FROM Orders WHERE OrderDate BETWEEN '1996-07-01' AND '1966-12-31'
--> Orders테이블의 데이터를 가져오고, OrderDate가 1996-07-01부터 1996-12-31인 데이터들을 가져옵니다.
-- GROUP BY CONVERT(NCHAR(6), OrderDate, 112)
--> CONVERT를 이용해서 OrderDate를 문자형으로 캐스팅하고, GROUP BY를 통해서 월별로 묶어줍니다.
2.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | --2.Use Orders -- Select OrderDate bigger or equal 1996-07 -- and OrderDate smaller or equal 1996-12 -- Select OrderYM, CustomerID, OrderCount column -- OrderYM = OrderDate change to YYYYMM -- OrderCount = Count of Orders by OrderYM, CustomerID ------------------------------------------------------------------------------ SELECT CONVERT(NCHAR(6), OrderDate, 112) OrderYM ,CustomerID ,Count(*) OrderCount FROM Orders WHERE OrderDate BETWEEN '1996-07-01' AND '1996-12-31' GROUP BY CONVERT(NCHAR(6), OrderDate, 112), CustomerID ORDER BY CONVERT(NCHAR(6), OrderDate, 112) | cs |
- 결과 데이터
-- SELECT CONVERT(NCHAR(6), OrderDate, 112) OrderYM, CustomerID, COUNT(*) OrderCount
--> CONVERT를 이용해서 OrderDate를 문자형으로 캐스팅하고, 월별로 나누고, CustomerID와 집계함수 COUNT를 이용해서 OrderDate를 월별로 CustomerID별로 갯수를 구합니다.
-- FROM Orders WHERE OrderDate BETWEEN '1996-07-01' AND '1996-12-31'
--> Orders테이블에 데이터를 가져오고 OrderDate는 '1996-07-01'부터 '1996-12-31'를 만족하는 데이터를 가져옵니다.
-- GROUP BY CONVERT(NCHAR(6), OrderDate, 112), CustomerID
--> OrderDate의 월별로, CustomerID별로 GROUP BY를 합니다.
-- ORDER BY CONVERT(NCHAR(6), OrderDate, 112)
--> OrderDate의 월순으로 데이터를 올림차순합니다.
3.
1 2 3 4 5 6 7 8 9 10 11 12 13 | --3.Use Orders -- Select OrderDate between '1996-07' and '1996-12' -- Select only Weekday, OrderCount column -- Weekday : day of week about OrderDate -- OrderCount : Count of Orders by Weekday -- And OrderCount smaller 30(not include 30) ------------------------------------------------------------------------------ SELECT DATENAME(WEEKDAY, OrderDate) Weekday ,COUNT(*) OrderCount FROM Orders WHERE OrderDate BETWEEN '1996-07-01' AND '1996-12-31' GROUP BY DATENAME(WEEKDAY, OrderDate) HAVING COUNT(*) < 30 | cs |
- 결과 데이터
-- SELECT DATENAME(WEEKDAY, OrderDate) Weekday, COUNT(*) OrderCount
--> DATENAME을 사용해서 OrderDate를 요일별로 나누고, 집계함수 COUNT를 통해서 그 갯수를 구합니다.
-- FROM Orders WHERE OrderDate BETWEEN '1996-07-01' AND '1996-12-31'
--> Orders테이블의 데이터를 가져오고 OrderDate가 '1996-07-01'부터 '1996-12-31'까지를 만족하는 데이터를 가져옵니다.
-- GROUP BY DATENAME(WEEKDAY, OrderDate) HAVING COUNT(*) < 30
OrderDate를 DATENAME을 사용해서 요일별로 묶고 GROUP BY를 한다. 그리고 HAVING을 사용해서 그 갯수가 30개 이하인 데이터를 가져옵니다.
여기까지 SQL문 실습 LevelUp Test를 풀어봤습니다.
다음 글에서는 SQL문 실습 Second Level로 넘어갑니다.
약간 난이도가 올라갑니다.
CASE문에 대해서 알아보겠습니다.
다음 글 : SQL문 실습 - CASE문(1)
참고 : SQL Server 기본 SQL문 교육
'프로그래밍 > MS-SQL' 카테고리의 다른 글
SQL문 실습 - CASE문(2) (0) | 2016.05.07 |
---|---|
SQL문 실습 - CASE문(1) (0) | 2016.05.07 |
SQL문 실습 - GROUP BY(4) (0) | 2016.04.17 |
SQL문 실습 - GROUP BY (3) (0) | 2016.04.17 |
DBMS의 데이터를 엑셀로 내보내기 (0) | 2016.04.17 |