Notice
Recent Posts
Recent Comments
Link
«   2026/07   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

어리바리 신입 개발자의 얼렁뚱땅 개발 기록 ✨

23.05.30 / GROUP_CONCAT 본문

Database/MYSQL

23.05.30 / GROUP_CONCAT

낫쏘링 2023. 5. 30. 09:35
728x90

[ GROUP_CONCAT ]

  • 서로 다른 결과를 한 줄로 보여줄 때 사용
  • 기본 구분자 : ,(쉼표)
  • 구분자 변경 : GROUP_CONCAT(컬럼명 SEPARATOR '&') -> 구분자가 쉼표에서 &로 바뀌는 쿼리
  • 중복 문자열  제거 : GROUP_CONCAT(DISTINCT 컬럼명)
SELECT
*

FROM
      테이블_이름;

SELECT
      컬럼1
,     GROUP_CONCAT(컬럼2)
FROM
      테이블_이름
GROUP BY 컬럼1;
WITH cte_order
AS
(SELECT
	M.m_id 
,	M.m_name 
,	G.g_name
,	SUM(O.o_amount)
FROM
	tb_order AS O
	INNER JOIN
	tb_member AS M
	ON
	M.m_id = O.o_id
	INNER JOIN
	tb_goods AS G
	ON
	O.o_g_code = G.g_code
/* WHERE 절로 조회할 경우 (아래 CONCAT문에서 GROUP BY 해주고 있기 때문에 나중에 조회할 때 GROUP BY 없어도 묶임)
	WHERE
	O.o_amount >= 20
*/
GROUP BY
	 M.m_id, G.g_code 
	 -- GROUP BY는 그룹 중 하나만 출력되기 때문에 
	 -- M.m_id 하나만 묶으면 아이디가 여러 개인 경우 하나만 출력한다.
	 -- 그래서  G.g_code도 같이 묶어준다.
HAVING
	SUM(O.o_amount) >= 20	
)

SELECT
	CO.m_id AS '구매자'
,	GROUP_CONCAT(DISTINCT CO.g_name SEPARATOR '&') AS '구매목록'
FROM
	cte_order AS CO
GROUP BY CO.m_id;
/* GROUP BY를 WITH문이 아니라 CONCAT에 사용할 경우..(위에 WITH문에서 g_code 셀렉트 해줘야함)
GROUP BY
	CO.m_id, CO.g_code
HAVING
	SUM(CO.o_amount) >= 20
*/

 

 

 

728x90