BOOSTER QUIZ 5-1-1
(SQL-1)과 (결과-1)을 참고해, (SQL-2)를 실행하면 나올 (결과-2)를 채우시오.
•
SQL을 실행하지 않고 (결과-2)를 예측해서 채우시오.
•
(SQL-2)는 (SQL-1)을 GROUP BY 처리한 SQL이다.
-- (SQL-1)
SELECT T1.OrdNo, T1.OrdDtm ,T1.ShopId ,T1.OrdSt
FROM startdb.Ord T1
WHERE T1.OrdNo IN (91946,91917,91916,91872,91763)
ORDER BY T1.OrdNo DESC;
-- (결과-1)
OrdNo OrdDtm ShopId OrdSt
----- ------------------- ------ -----
91946 2023-03-31 20:30:00 S200 PREF
91917 2023-03-31 20:00:00 S131 MFGC
91916 2023-03-31 20:00:00 S111 MFGC
91872 2023-03-31 19:00:00 S107 PKUP
91763 2023-03-31 18:00:00 S107 PKUP
SQL
복사
-- (SQL-2)
SELECT T1.OrdSt
FROM startdb.Ord T1
WHERE T1.OrdNo IN (91946,91917,91916,91872,91763)
GROUP BY T1.OrdSt
ORDER BY T1.OrdSt ASC;
-- (결과-2)
SQL
복사
BOOSTER QUIZ 5-1-2
(SQL-1)과 (결과-1)을 참고해, (SQL-2)를 실행하면 나올 (결과-2)를 채우시오.
•
SQL을 실행하지 않고 (결과-2)를 예측해서 채우시오.
•
(SQL-2)는 (SQL-1)을 GROUP BY 처리한 SQL이다.
-- (SQL-1)
SELECT T1.OrdNo, T1.OrdDtm ,T1.ShopId ,T1.OrdSt
FROM startdb.Ord T1
WHERE T1.OrdNo IN (91946,91917,91916,91872,91763)
ORDER BY T1.OrdNo DESC;
-- (결과-1)
OrdNo OrdDtm ShopId OrdSt
----- ------------------- ------ -----
91946 2023-03-31 20:30:00 S200 PREF
91917 2023-03-31 20:00:00 S131 MFGC
91916 2023-03-31 20:00:00 S111 MFGC
91872 2023-03-31 19:00:00 S107 PKUP
91763 2023-03-31 18:00:00 S107 PKUP
SQL
복사
-- (SQL-2)
SELECT T1.ShopId
FROM startdb.Ord T1
WHERE T1.OrdNo IN (91946,91917,91916,91872,91763)
GROUP BY T1.ShopId
ORDER BY T1.ShopId;
-- (결과-2)
SQL
복사
BOOSTER QUIZ 5-2-1
(SQL-1)과 (결과-1)을 참고해, (SQL-2)를 실행하면 나올 (결과-2)를 채우시오.
•
SQL을 실행하지 않고 (결과-2)를 예측해서 채우시오.
•
(SQL-2)는 (SQL-1)을 GROUP BY 처리한 SQL이다.
-- (SQL-1)
SELECT T1.ShopId, T1.MemberId ,T1.OrdDtm ,T1.OrdAmt
FROM startdb.Ord T1
WHERE T1.OrdDtm >= STR_TO_DATE('20200101','%Y%m%d')
AND T1.OrdDtm < STR_TO_DATE('20200201','%Y%m%d')
AND T1.ShopId IN ('S015','S016','S023')
ORDER BY T1.ShopId ,T1.OrdNo;
-- (결과-1)
ShopId MemberId OrdDtm OrdAmt
------ -------- ------------------- --------
S015 M1278 2020-01-02 13:00:00 8000.000
S015 M1278 2020-01-30 13:00:00 4500.000
S016 M0292 2020-01-02 11:00:00 4000.000
S016 M0292 2020-01-30 11:00:00 3000.000
S023 M1293 2020-01-11 10:30:00 7500.000
S023 M1293 2020-01-23 10:30:00 4000.000
S023 M1293 2020-01-29 10:30:00 4000.000
SQL
복사
-- (SQL-2)
SELECT T1.ShopId ,COUNT(*) CNT, SUM(T1.OrdAmt) SUM_AMT
FROM startdb.Ord T1
WHERE T1.OrdDtm >= STR_TO_DATE('20200101','%Y%m%d')
AND T1.OrdDtm < STR_TO_DATE('20200201','%Y%m%d')
AND T1.ShopId IN ('S015','S016','S023')
GROUP BY T1.ShopId
ORDER BY T1.ShopId;
-- (결과-2)
SQL
복사
BOOSTER QUIZ-5-2-2
(SQL-1)과 (결과-1)을 참고해, (SQL-2)를 실행하면 나올 (결과-2)를 채우시오.
•
SQL을 실행하지 않고 (결과-2)를 예측해서 채우시오.
•
(SQL-2)는 (SQL-1)을 GROUP BY 처리한 SQL이다.
-- (SQL-1)
SELECT T1.ShopId, T1.MemberId ,T1.OrdDtm ,T1.OrdAmt
FROM startdb.Ord T1
WHERE T1.OrdDtm >= STR_TO_DATE('20200101','%Y%m%d')
AND T1.OrdDtm < STR_TO_DATE('20200201','%Y%m%d')
AND T1.ShopId IN ('S015','S016','S023')
ORDER BY T1.ShopId ,T1.OrdNo;
-- (결과-1)
ShopId MemberId OrdDtm OrdAmt
------ -------- ------------------- --------
S015 M1278 2020-01-02 13:00:00 8000.000
S015 M1278 2020-01-30 13:00:00 4500.000
S016 M0292 2020-01-02 11:00:00 4000.000
S016 M0292 2020-01-30 11:00:00 3000.000
S023 M1293 2020-01-11 10:30:00 7500.000
S023 M1293 2020-01-23 10:30:00 4000.000
S023 M1293 2020-01-29 10:30:00 4000.000
SQL
복사
-- (SQL-2)
SELECT T1.MemberId ,SUM(T1.OrdAmt) SUM_AMT ,MIN(T1.OrdDtm) 최초주문일
FROM startdb.Ord T1
WHERE T1.OrdDtm >= STR_TO_DATE('20200101','%Y%m%d')
AND T1.OrdDtm < STR_TO_DATE('20200201','%Y%m%d')
AND T1.ShopId IN ('S015','S016','S023')
GROUP BY T1.MemberId
ORDER BY T1.MemberId;
-- (결과-2)
SQL
복사
BOOSTER QUIZ 5-2-3
커피 카테고리 메뉴(상품)가 사이즈별로 몇 개인지 알려주세요. 단순히 메뉴 개수를 알고 싶어요.
•
대상 테이블: 상품(Item)
•
조회 조건: ItemCat가 COF(커피)인 데이터
•
조회 컬럼: ItemSizeCd, ItemCnt
•
추가 조건
◦
ItemSizeCd 별로 GROUP BY 처리하시오.
◦
ItemCnt는 ItemSize별 상품 건수
•
정렬 기준: ItemSizeCd로 오름차순 정렬하시오.
ItemSizeCd ItemCnt
---------- -------
BIG 4
REG 8
SQL
복사
풀이
BOOSTER QUIZ 5-2-4
2022년 1월 주문에 대해 회원ID 별로 주문금액 합계와 주문 건수를 뽑아주세요.
•
대상 테이블: 주문(Ord)
•
조회 조건: OrdDtm이 2022년 1월인 주문 데이터
•
조회 컬럼: MemberId, OrdAmt_Sum, OrdCnt
•
추가 조건
◦
MemberId 별로 GROUP BY 처리하시오.
◦
OrdAmt_Sum은 MemberId별 OrdAmt를 SUM 집계한 값
◦
OrdCnt는 MemberId별 데이터 건수
•
정렬 기준: OrdAmt_Sum으로 내림차순 정렬하시오.
MemberId OrdAmt_Sum OrdCnt
-------- ---------- ------
M2001 177000.000 31
M0001 163000.000 31
M1001 154000.000 31
M1249 39500.000 4
M1201 37500.000 4
M0207 34000.000 4
… 생략 …
SQL
복사
풀이
BOOSTER QUIZ 5-3-1
아래 SQL에서 잘 못 처리된 부분을 고르고, 왜 잘못되었는지 설명하시오.
SELECT T1.HotColdCd -- 1
,T1.LaunchDt -- 2
FROM startdb.Item T1
WHERE T1.ItemCat = 'BEV' -- 3
GROUP BY T1.HotColdCd -- 4
SQL
복사
BOOSTER QUIZ 5-3-2
아래 SQL에서 GROUP BY에 필요한 컬럼을 적으시오.
SELECT MIN(T1.OrdDtm) FirstOrdDtm
,MAX(T1.OrdDtm) LastOrdDtm
,T1.MemberId
FROM startdb.Ord T1
WHERE T1.OrdDtm >= STR_TO_DATE('20220101','%Y%m%d')
AND T1.OrdDtm < STR_TO_DATE('20220103','%Y%m%d')
AND T1.ShopId IN ('S012','S212')
GROUP BY ?;
SQL
복사
BOOSTER QUIZ 5-4-1
아래는 상품카테고리(ItemCat)로 GROUP BY 처리하는 SQL이며 에러가 발생하고 있다. GROUP BY를 유지할 경우, 아래 SQL에서 잘못된 부분 두 곳을 찾으시오.
SELECT T1.ItemCat -- 1
,COUNT(*) ItemCnt -- 2
,T1.ItemSizeCd -- 3
FROM startdb.Item T1
WHERE T1.HotColdCd = 'HOT'
GROUP BY T1.ItemCat -- 4
HAVING COUNT(*) >= 2 -- 5
AND
T1.ItemId NOT LIKE 'A%' -- 6
;
SQL
복사
BOOSTER QUIZ 5-5-1
(SQL-1)과 (결과-1)을 참고해, (SQL-2)를 실행하면 나올 (결과-2)를 채우시오.
•
SQL을 실행하지 않고 (결과-2)를 예측해서 채우시오.
•
(SQL-2)는 (SQL-1)을 GROUP BY 처리한 SQL이다.
-- (SQL-1)
SELECT T1.OrdNo ,T1.OrdDtm
FROM startdb.Ord T1
WHERE T1.ShopId = 'S092'
AND T1.OrdDtm>=STR_TO_DATE('20210901','%Y%m%d')
AND T1.OrdDtm< STR_TO_DATE('20211101','%Y%m%d')
ORDER BY T1.OrdNo ASC;
-- (결과-1)
OrdNo OrdDtm
----- -------------------
16617 2021-09-04 13:30:00
16831 2021-09-06 13:30:00
16896 2021-09-08 13:30:00
17119 2021-09-13 13:30:00
17202 2021-09-21 13:30:00
17776 2021-10-04 13:30:00
17990 2021-10-06 13:30:00
SQL
복사
-- (SQL-2)
SELECT DATE_FORMAT(T1.OrdDtm,'%Y%m') YM ,COUNT(*) CNT
FROM startdb.Ord T1
WHERE T1.ShopId = 'S092'
AND T1.OrdDtm>=STR_TO_DATE('20210901','%Y%m%d')
AND T1.OrdDtm< STR_TO_DATE('20211101','%Y%m%d')
GROUP BY DATE_FORMAT(T1.OrdDtm,'%Y%m')
ORDER BY YM ASC;
-- (결과-2)
SQL
복사
BOOSTER QUIZ 5-5-2
S019 매장의 2022년 주문 데이터를 주문년월별로 주문 건수와 주문금액 합계를 구해주세요.
•
대상 테이블: 주문(Ord)
•
조회 조건: ShopId가 S019 이면서 OrdDtm이 2022년인 주문 데이터
•
조회 컬럼: OrdYm, OrdCnt ,OrdAmtSum
•
추가 조건
◦
OrdYm은 OrdDtm을 년월(YYYYMM) 형태의 문자로 변형한 항목
◦
OrdYm 별로 GROUP BY 처리하시오.
◦
OrdCnt는 OrdYm 별 데이터 건수
◦
OrdAmt는 OrdYm 별 OrdAmt를 SUM 집계한 값
•
정렬 기준: OrdYm으로 내림차순 정렬하시오.
OrdYm OrdCnt OrdAmtSum
------ ------ ----------
202012 25 136500.000
202011 8 35000.000
202010 8 57000.000
… 생략 …
SQL
복사
풀이
BOOSTER QUIZ 5-5-3
2020년 주문에 대해, 주문 시간대별로 주문 건수를 알고 싶어, 가장 주문 건수가 많은 시간대를 확인하려고요.
•
대상 테이블: 주문(Ord)
•
조회 조건: OrdDtm이 2020년인 주문 데이터
•
조회 컬럼: OrdHour, OrdCnt
•
추가 조건
◦
OrdHour는 OrdDtm에서 DATE_FORMAT을 사용해 시간(%H)만 추출한 항목
◦
OrdHour 별로 GROUP BY 처리하시오.
◦
OrdCnt는 OrdHour 별 데이터 건수
•
정렬 기준: OrdCnt로 내림차순 정렬하시오.
OrdHour OrdCnt
------- ------
14 1886
13 1348
11 1305
12 1242
… 생략 …
SQL
복사
풀이
BOOSTER QUIZ 5-6-1
S213과 S214 매장의 2022년 1월 5일부터 2022년 1월 15일까지의 주문을 매장별, 주문일자별로 주문건수를 집계해 보여주세요.
•
대상 테이블: 주문(Ord)
•
조회 조건: ShopId가 S213이거나 S214이면서, OrdDtm이 2022년 1월5일 이상, 2022년 1월 15일 이하인 데이터.
•
조회 컬럼: ShopId, 주문일자, OrdCnt
•
추가 조건
◦
주문일자는 OrdDtm을 DATE_FORMAT을 사용해 YYYYMMDD 형태의 문자열로 변환한 항ahr
◦
ShopId, 주문일자별로 GROUP BY 처리하시오.
◦
OrdCnt는 ShopId, 주문일자별 데이터 건수
•
정렬 기준: ShopId로 오름차순 한 후에 주문일자로 오름차순하시오.
ShopID 주문일자 OrdCnt
------ -------- ------
S213 20220105 3
S213 20220111 3
S214 20220105 3
S214 20220111 3
SQL
복사
풀이
BOOSTER QUIZ 5-6-2
S213과 S214 매장의 2022년 1월 주문을, 매장별 제조완료분수별로 카운트해주세요. 매장별로 제조완료분수가 주로 몇 분대인지 파악하려고요.
•
대상 테이블: 주문(Ord)
•
조회 조건: ShopId가 S213이거나 S214이면서, OrdDtm이 2022년 1월인 데이터.
•
조회 컬럼: ShopId, 제조완료분수, OrdCnt
•
추가 조건
◦
제조완료분수는 OrdDtm부터 PrepareCmpDtm까지 걸린 분(MINUTE)수
▪
TIMESTAMPDIFF를 사용해 처리.
◦
ShopId, 제조완료분수 별로 GROUP BY 처리하시오.
◦
OrdCnt는 ShopId, 제조완료분수 별 데이터 건수
•
정렬 기준: ShopId로 오름차순한 후에 제조완료분수로 오름차순하시오.
ShopID 제조완료분수 OrdCnt
------ ------------ ------
S213 5 2
S213 12 8
S213 14 4
S214 9 8
S214 11 4
SQL
복사
풀이
BOOSTER QUIZ 5-9-1
아래 SQL로 얻은 결과 집합의 UK를 말하시오.
SELECT T1.MemberId ,DATE_FORMAT(T1.OrdDtm,'%Y%m%d') OrdYmd
,COUNT(*) OrdCnt
FROM startdb.Ord T1
WHERE T1.OrdDtm >= STR_TO_DATE('20231101','%Y%m%d')
AND T1.OrdDtm < STR_TO_DATE('20231201','%Y%m%d')
AND T1.OrdAmt >= 20000
GROUP BY T1.MemberId ,DATE_FORMAT(T1.OrdDtm,'%Y%m%d')
ORDER BY T1.MemberId ,OrdYmd;
SQL
복사
풀이
BOOSTER QUIZ 5-9-2
아래 SQL로 얻은 결과 집합의 UK를 말하시오.
SELECT T1.ShopId ,DATE_FORMAT(T1.OrdDtm,'%H') OrdHour ,T1.OrdSt
,SUM(T1.OrdAmt) SUM_OrdAmt
FROM startdb.Ord T1
WHERE T1.OrdDtm >= STR_TO_DATE('20231224','%Y%m%d')
AND T1.OrdDtm < STR_TO_DATE('20231225','%Y%m%d')
AND T1.OrdAmt >= 20000
GROUP BY T1.ShopId ,DATE_FORMAT(T1.OrdDtm,'%H') ,T1.OrdSt
SQL
복사
풀이