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