여러 컬럼의 GROUP BY
GROUP BY에 여러 컬럼(항목)을 정의할 수 있다.
-- [SQL-5-6-1] GROUP BY 처리전 SQL
SELECT  T1.ItemId ,T1.ItemNm ,T1.ItemSizeCd ,T1.HotColdCd
FROM    startdb.Item T1
WHERE   T1.ItemCat != 'COF'
AND     T1.LaunchDt = STR_TO_DATE('20190101','%Y%m%d')
ORDER BY T1.ItemSizeCd ,T1.HotColdCd;
-- GROUP BY 처리전 결과
ItemId  ItemNm               ItemSizeCd  HotColdCd  
------  -------------------  ----------  ---------  
HCHB    Hot Chocolate(B)     BIG         HOT        
LEMR    Lemonade(R)          REG         COLD       
BMFR    Blueberry Muffin(R)  REG         COLD       
CMFR    Chocolate Muffin(R)  REG         COLD       
HCHR    Hot Chocolate(R)     REG         HOT        
BGLR    Bagel(R)             REG         HOT             
-- [SQL-5-6-2] ItemSizeCd, HotColdCd별 GROUP BY
SELECT  T1.ItemSizeCd ,T1.HotColdCd ,COUNT(*) ItemCnt
FROM    startdb.Item T1
WHERE   T1.ItemCat !='COF'
GROUP BY T1.ItemSizeCd ,T1.HotColdCd
ORDER BY T1.ItemSizeCd ,T1.HotColdCd;
-- ItemSizeCd, HotColdCd별 GROUP BY 처리후 결과
ItemSizeCd  HotColdCd  ItemCnt  
----------  ---------  -------  
BIG         HOT        1        
REG         COLD       3        
REG         HOT        2 
SQL
복사
아래는 주문(Ord) 데이터를 주문년월(OrdYm)별 회원ID별 GROUP BY 처리한 SQL이다.
-- [SQL-5-6-3]
SELECT  DATE_FORMAT(T1.OrdDtm,'%Y%m') OrdYm ,T1.MemberId
        ,SUM(T1.OrdAmt) SumOrdAmt
FROM    startdb.Ord T1
WHERE   T1.OrdDtm >= STR_TO_DATE('20220101','%Y%m%d')
AND     T1.OrdDtm <  STR_TO_DATE('20220401','%Y%m%d')
AND     T1.MemberId IN ('M0207','M0208','M0209')
GROUP BY DATE_FORMAT(T1.OrdDtm,'%Y%m') ,T1.MemberId
ORDER BY DATE_FORMAT(T1.OrdDtm,'%Y%m') ,SumOrdAmt DESC;
OrdYm   MemberId  SumOrdAmt  
------  --------  ---------  
202201  M0207     34000.000  
202201  M0209     16000.000  
202201  M0208     8000.000   
202202  M0209     15000.000  
202202  M0207     14000.000  
202202  M0208     11000.000  
202203  M0209     23500.000  
202203  M0207     13500.000  
202203  M0208     11000.000  
SQL
복사
BOOSTER QUIZ
BOOSTER QUIZ ERD
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
복사






