Search

5-7. GROUP_CONCAT

GROUP_CONCAT

GROUP CONCAT은 그룹핑된 여러 레코드의 값을 하나로 결합해 보여주는 아주 특별한 집계함수다.
관계형 데이터베이스는 로우와 컬럼 구조인 테이블로 데이터를 관리하고 표현한다.
SQL의 결과 역시 테이블 형태(로우와 컬럼)로 출력된다.
로우와 컬럼이 교차하는 하나의 셀(Cell, 칸)에는 보통 하나의 값이 저장된다.
마찬가지로 SQL의 결과도 테이블 형태로 보여주며, 보통은 하나의 셀에 하나의 값만 표시한다.
그런데, 가끔 사용자들이 하나의 셀에 여러 개 값을 보여주기를 원할 때가 있다.
이럴 때 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)
SQL
복사
아래와 같이 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)
SQL
복사
Upper: 5. GROUP BY