Search

98-5. BOOSTER QUIZ 답안 5

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
복사
풀이