어리바리 신입 개발자의 얼렁뚱땅 개발 기록 ✨
23.05.30 / GROUP_CONCAT 본문
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
'Database > MYSQL' 카테고리의 다른 글
| 23.06.05 / MySQL workbench, 트랜잭션 (0) | 2023.06.05 |
|---|---|
| 23.05.30 / Stored Program(프로시저,DELIMITER,매개변수,변수,함수) (1) | 2023.05.30 |
| 23.05.29 / 서브 쿼리 (0) | 2023.05.29 |
| 23.05.23 / 데이터베이스 설계 & eXERD (0) | 2023.05.22 |
| 23.05.16 / JOIN & NULL 조회 (0) | 2023.05.16 |