내가 관리? 하는 ㅋㅋ 데이터 중 다음과 같은 형식의 데이터들이 있다.
예시를 들자면 ...
제품 ID (ID) | 제품 판매점 (STORE_CD) |
M001 | 서울 지점 |
M002 | 서울 지점 |
M002 | 부산 지점 |
M003 | 서울 지점 |
M003 | 부산 지점 |
M003 | 대구 지점 |
M003 | 제주 지점 |
... | ... |
제품의 마스터 테이블은 따로 있고, 판매하는 지점 테이블은 후에 분석을 해야 하기 때문에 마스터 테이블에 한 컬럼으로 추가하지 않고 별개의 테이블을 생성해서 저장하고 있는 것으로 보인다. (설계 단계 때 참여한 게 아니라 왜 이런 식으로 만들었는지 모름...)
제품의 다양한 값들을 unique하게 추출해달라는 요청이 있었는데, 제품 마스터 테이블과 판매 지점 테이블을 INNER JOIN하면 제품 판매점 row 수만큼 데이터가 무한정 늘어나기 때문에 해당 데이터들을 한 row에 합쳐야 했다.
이러한 상황, 즉 여러 row 데이터를 한 row에 합쳐야 할 때에는 GROUP_CONCAT 함수를 사용하면 된다.
기본 문법은 다음과 같다.
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val]
[LIMIT {[offset,] row_count | row_count OFFSET offset}])
정말 기본적으로 GROUP_CONCAT 함수를 사용해 보았다.
SELECT ID, GROUP_CONCAT(STORE_CD) AS STORES
FROM STORE_TABLE
GROUP BY ID
실행 결과는 다음과 같다.
ID | STORES |
M001 | 서울 지점 |
M002 | 서울 지점,부산 지점 |
M003 | 서울 지점,부산 지점,대구 지점,제주 지점 |
... | ... |
SEPARATOR 파라미터를 따로 지정해주는 것이 아니라면, 무조건 쉼표를 사용한다.
SEPARATOR를 사용한다면 실행 결과는 다음과 같다.
SELECT ID, GROUP_CONCAT(STORE_CD SEPARATOR ' ') AS STORES
FROM STORE_TABLE
GROUP BY ID
실행 결과는 다음과 같다.
ID | STORES |
M001 | 서울 지점 |
M002 | 서울 지점 부산 지점 |
M003 | 서울 지점 부산 지점 대구 지점 제주 지점 |
... | ... |
처음에 이 함수를 몰라서 검색할 때, how to sum rows in mysql 이런 식으로 검색하다가 진짜 sum 함수 설명만 줄줄히 보고 나왔다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ merge라고 검색하면 나옴...
'공부 > SQL' 카테고리의 다른 글
[AWS RDS, MySQL] AWS RDS MySQL에서 이모티콘 사용하기 (0) | 2022.06.30 |
---|---|
[MySQL] 개인정보 (휴대폰번호, 이름) 마스킹 처리 (0) | 2022.05.31 |