loading

프로그래밍/MS-SQL

SQL문 실습 - LevelUpTest

침착곰 2016. 4. 17. 20:18
반응형

- 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