mysql 조회하기 질문드려요 0 4 1,568

by 메밀묵도토리묵 [SQL Query] mariadb dbeaver [2022.12.05 10:28:21]


과일 원산지 순서 관련 비용
포도 한국 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

 

by eddy [2022.12.05 11:34:21]

안녕하세요

저도 초보라서 아래 내용은 참고만 부탁드립니다.

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로 테스트 해볼수없어 많은 도움을 못드려 죄송합니다..^^


by 메밀묵도토리묵 [2022.12.05 15:24:12]

아닙니다~ 감사합니다^^


by pajama [2022.12.05 12:30:42]

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 과일, 원산지, 순서

 


by 메밀묵도토리묵 [2022.12.05 15:24:46]

감사합니다~

max case랑 max if로 해보겠습니다^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입