설치&설정 관련/MariaDB & Mysql
[TIP]문자열을 ROWS로 변경 하는 방법
lahuman
2015. 7. 21. 14:05
728x90
문자열을 rows로 변환하는 질문이 있어서 해당 건에 대한 처리 내역 입니다.
조건
다음과 같은 Table가 있을 경우
id |
name |
1 |
사과 |
2 |
배 |
3 |
사과,포도 |
다음과 같은 결과를 도출하기를 원한다.
name |
count |
배 |
1 |
사과 |
2 |
포도 |
1 |
해당 건을 처리 하기 위해서는 사과,포도 라는 문자열을 2개의 ROW 처럼 인식 하도록 수정 해야 한다.
처리 결과 : http://sqlfiddle.com/#!2/04a0f/2
내역 설명
-- 테이블 & 데이터 설정 CREATE TABLE tablename ( id INT, name VARCHAR(20)); INSERT INTO tablename VALUES (1, '사과'), (2, '배'), (3, '사과,포도'); -- 최대 6개까지 처리 가능 만약 더 필요 하다면 데이터 값을 추가 해야함 CREATE TABLE numbers ( n INT PRIMARY KEY); INSERT INTO numbers VALUES (1),(2),(3),(4),(5),(6); -- number와 join 하여 , 기준의 문자를 여러 row 처럼 인식하도록 처리 select a.name, count(1) from ( SELECT tablename.id, SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) name FROM numbers INNER JOIN tablename ON CHAR_LENGTH(tablename.name) -CHAR_LENGTH(REPLACE(tablename.name, ',', ''))>=numbers.n-1 ) a group by a.name
사실 참고 SQL을 가지고 살짝만 수정한 것이다.
질문 원본 : https://www.facebook.com/groups/codingeverybody/1025201834187019/?notif_t=group_comment_reply
참조 내역 : http://stackoverflow.com/questions/17942508/sql-split-values-to-multiple-rows
728x90