과일 | 원산지 | 순서 | 관련 비용 | 값 |
포도 | 한국 | 0 | 첫번째 | 1100 |
포도 | 한국 | 0 | 두번째 | 1200 |
포도 | 한국 | 0 | 세번째 | 1300 |
포도 | 한국 | 1 | 첫번째 | 1400 |
포도 | 한국 | 1 | 두번째 | 1500 |
포도 | 한국 | 1 | 세번째 | 1600 |
포도 | 한국 | 2 | 첫번째 | 2100 |
포도 | 한국 | 2 | 두번째 | 2200 |
포도 | 한국 | 2 | 세번째 | 2300 |
포도 | 한국 | 3 | 첫번째 | 2400 |
포도 | 한국 | 3 | 두번째 | 2500 |
포도 | 한국 | 3 | 세번째 | 2600 |
mysql 초보자입니다...
위의 테이블을 select할 때, 아래 테이블처럼 약간 관련 비용 컬럼의 데이터를 가로로 펼쳐서? 조회할려면 어떻게 해야할까요?
아님, 어떤거를 찾아봐야 하나요?
과일 | 원산지 | 순서 | 첫번째 | 두번째 | 세번째 |
포도 | 한국 | 0 | 1100 | 1200 | 1300 |
포도 | 한국 | 1 | 1400 | 1500 | 1600 |
포도 | 한국 | 2 | 2100 | 2200 | 2300 |
포도 | 한국 | 3 | 2400 | 2500 | 2600 |
안녕하세요
저도 초보라서 아래 내용은 참고만 부탁드립니다.
mysql 에서 GROUP_CONCAT를 이용해서 필드를 구분자로 묶을수가 있어요 (참고 : https://fruitdev.tistory.com/16)
묶은 내용을 필드로 분리 하려면 REGEXP_SUBSTR을 이용하여 분리 할수 있는데 이 함수는 MYSQL8.0 부터 지원을 해서 버전이 안맞다고 하면 사용하기 어려울것 같습니다.(https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-substr)
mysql로 테스트 해볼수없어 많은 도움을 못드려 죄송합니다..^^
mysql은 행열을 변환할때 max case나 max if를 사용할 수 있습니다. 다른 가능한 방법도 있을수 있고요.
보여주신 데이터로 아래같이 해봤습니다~
with t (과일, 원산지, 순서, 관련비용,값) as ( select '포도', '한국', 0, '첫번째', 1100 union all select '포도', '한국', 0, '두번째', 1200 union all select '포도', '한국', 0, '세번째', 1300 union all select '포도', '한국', 1, '첫번째', 1400 union all select '포도', '한국', 1, '두번째', 1500 union all select '포도', '한국', 1, '세번째', 1600 union all select '포도', '한국', 2, '첫번째', 2100 union all select '포도', '한국', 2, '두번째', 2200 union all select '포도', '한국', 2, '세번째', 2300 union all select '포도', '한국', 3, '첫번째', 2400 union all select '포도', '한국', 3, '두번째', 2500 union all select '포도', '한국', 3, '세번째', 2600 ) select 과일, 원산지, 순서, max(case when 관련비용='첫번째' then 값 else 0 end) 첫번째, max(case when 관련비용='두번째' then 값 else 0 end) 두번째, max(case when 관련비용='세번째' then 값 else 0 end) 세번째 from t group by 과일, 원산지, 순서