GROUP_CONCAT


GROUP CONCAT은 그룹핑된 여러 레코드의 값을 하나로 결합해 보여주는 아주 특별한 집계함수다.

-- [SQL-5-7-1] 하나의 셀에는 하나의 값
SELECT  T1.ItemCat ,T1.ItemId ,T1.ItemNm
FROM    startdb.Item T1
WHERE   T1.ItemCat IN ('BEV','BKR')
AND     T1.LaunchDt = STR_TO_DATE('20190101','%Y%m%d')
ORDER BY T1.ItemCat ,T1.ItemId;

ItemCat  ItemId  ItemNm               
-------  ------  -------------------  
BEV      HCHB    Hot Chocolate(B)     
BEV      HCHR    Hot Chocolate(R)     
BEV      LEMR    Lemonade(R)          
BKR      BGLR    Bagel(R)             
BKR      BMFR    Blueberry Muffin(R)  
BKR      CMFR    Chocolate Muffin(R)     

-- [SQL-5-7-2] GROUP BY와 GROUP_CONCAT 적용 SQL
SELECT  T1.ItemCat ,GROUP_CONCAT(T1.ItemNm) ItemList
FROM    startdb.Item T1
WHERE   T1.ItemCat IN ('BEV','BKR')
AND     T1.LaunchDt = STR_TO_DATE('20190101','%Y%m%d')
GROUP BY T1.ItemCat;

ItemCat  ItemList                                          
-------  ------------------------------------------------  
BEV      Hot Chocolate(B),Hot Chocolate(R),Lemonade(R)     
BKR      Bagel(R),Blueberry Muffin(R),Chocolate Muffin(R)    

Untitled

아래와 같이 GROUP_CONCAT안에 여러 컬럼을 사용할 수도 있다.

-- [SQL-5-7-3]
SELECT  T1.ItemCat ,GROUP_CONCAT(T1.ItemNm,'(',T1.ItemId,')') ItemList
FROM    startdb.Item T1
WHERE   T1.ItemCat IN ('BEV','BKR')
AND     T1.LaunchDt = STR_TO_DATE('20190101','%Y%m%d')
GROUP BY T1.ItemCat;

ItemCat  ItemList                                                            
-------  ------------------------------------------------------------------  
BEV      Hot Chocolate(B)(HCHB),Hot Chocolate(R)(HCHR),Lemonade(R)(LEMR)     
BKR      Bagel(R)(BGLR),Blueberry Muffin(R)(BMFR),Chocolate Muffin(R)(CMFR) 

Next: 5-8. DISTINCT

Upper: 5. GROUP BY

하단푸터.png