선생님들 mysql 쿼리 질문 드려요.. 0 8 436

by 동가 [SQL Query] [2021.08.20 21:55:59]


쿼리.PNG (9,868Bytes)
12345.PNG (28,722Bytes)

중복된 id랑 que_1, 2 ,3 ... 등등 컬럼내용이 있는데 중복된 id값을 제외하고 옆에다가 que1,2,3 값 들을 join 처럼 쭈욱 이어서 붙힐수가 있을까요?

예를 들어 id 47에 대한 정보는 하나만 나오고 (중복제외) 밑에있는 47 대한 값들 (que_1 2 3 4 값) 옆에 계속해서 쭉 붙어 버리는거죠.. 이런게 가능 할까요?ㅎㅎ

 

글 읽어주셔서 감사합니다.

 

추가* 아 컬럼명이 빠져잇네요 

옆에서 부터 user_id que1 que2 que3 que4 que5 입니다..

by 마농 [2021.08.23 10:09:14]

질문이 모호합니다.
보여주신게 원본인가요?
원본 대비 결과표로 질문해 주시면 좋겠습니다.


by 동가 [2021.08.23 12:30:45]

마농님 댓글 감사드립니다.

추가로 수정해서 파일 하나더 올렸는데

user_id 하나의 정보가 행으로 이어져서 (* 예를 들면 user_id 26이 총 5개 row로 보여지는데 1개 행으로 이어져서 보여지게 ) 쭉 붙혀서 보여지게 할수가 있을까요?

   


by 마농 [2021.08.23 12:47:45]

여러줄을 한줄로 보고 싶다는 건 막연한 표현입니다.
어떤 기준으로 뽑는지 구체적인 기준이 없습니다.
일단 최소값 추출하는 예시 쿼리 알려드릴께요.
 

SELECT user_id
     , MIN(que1) que1
     , MIN(que2) que2
     , MIN(que3) que3
     , MIN(que4) que4
     , MIN(que5) que5
  FROM t
 GROUP BY user_id
;

 


by 동가 [2021.08.23 21:53:03]

넵 마농 선생님 맞습니다.사실 기준을 못잡는거여서 헤매고 있었습니다.

user_id는 중복되지않으며 예를 들면 

#############

1번 홍길동 3 4 5 

2번 김철수 3 4 5

2번 장동건 2 4 6

2번 김범수 4 8 3 

##############

이렇게 되있는 컬럼을 

###############

1번 홍길동 3 4 5

2번 김철수 3 4 5 장동건 2 4 6 김범수 4 8 3

###############

 

이렇게 만들어서 출력 하고 싶었습니다.. 기준을 어떻게 잡아야 할지 도저히 떠오르지않더라구요,

그래서 그냥 테이블 나뉘어서 조인으로 해결 하긴 했습니다 ^^;

답변 주신거 정말 감사합니다.


by 마농 [2021.08.24 08:20:15]
-- Oracle --
WITH t AS
(
SELECT '1번' id, '홍길동' nm, 3 q1, 4 q2, 5 q3 FROM dual
UNION ALL SELECT '2번', '김철수', 3, 4, 5 FROM dual
UNION ALL SELECT '2번', '장동건', 2, 4, 6 FROM dual
UNION ALL SELECT '2번', '김범수', 4, 8, 3 FROM dual
)
SELECT id
     , LISTAGG(nm ||' '|| q1 ||' '|| q2 ||' '|| q3, ' / ') WITHIN GROUP(ORDER BY nm) x
  FROM t
 GROUP BY id
;
WITH t AS
(
SELECT '1번' id, '홍길동' nm, 3 q1, 4 q2, 5 q3 FROM dual
UNION ALL SELECT '2번', '김철수', 3, 4, 5 FROM dual
UNION ALL SELECT '2번', '장동건', 2, 4, 6 FROM dual
UNION ALL SELECT '2번', '김범수', 4, 8, 3 FROM dual
)
SELECT *
  FROM (SELECT id, nm
             , q1, q2, q3
             , ROW_NUMBER() OVER(PARTITION BY id ORDER BY nm) rn
          FROM t
        )
 PIVOT (MIN(nm) nm, MIN(q1) q1, MIN(q2) q2, MIN(q3) q3 FOR rn IN (1, 2, 3, 4))
;

 


by 동가 [2021.08.24 14:31:48]

와,, 마농 선생님 정말 감사합니다. 

 


by 야신 [2021.08.25 07:38:49]

Group_concat 함수를 함 찾아보시지요


by 마농 [2021.08.25 10:00:09]
-- MySQL --
WITH t AS
(
SELECT '1번' id, '홍길동' nm, 3 q1, 4 q2, 5 q3
UNION ALL SELECT '2번', '김철수', 3, 4, 5
UNION ALL SELECT '2번', '장동건', 2, 4, 6
UNION ALL SELECT '2번', '김범수', 4, 8, 3
)
SELECT id
     , GROUP_CONCAT(CONCAT_WS(' ', nm, q1, q2, q3) ORDER BY nm SEPARATOR ' / ') x
  FROM t
 GROUP BY id
;

WITH t AS
(
SELECT '1번' id, '홍길동' nm, 3 q1, 4 q2, 5 q3
UNION ALL SELECT '2번', '김철수', 3, 4, 5
UNION ALL SELECT '2번', '장동건', 2, 4, 6
UNION ALL SELECT '2번', '김범수', 4, 8, 3
)
SELECT id
     , MIN(CASE rn WHEN 1 THEN nm END) nm_1
     , MIN(CASE rn WHEN 1 THEN q1 END) q1_1
     , MIN(CASE rn WHEN 1 THEN q2 END) q2_1
     , MIN(CASE rn WHEN 1 THEN q3 END) q3_1
     , MIN(CASE rn WHEN 2 THEN nm END) nm_2
     , MIN(CASE rn WHEN 2 THEN q1 END) q1_2
     , MIN(CASE rn WHEN 2 THEN q2 END) q2_2
     , MIN(CASE rn WHEN 2 THEN q3 END) q3_2
     , MIN(CASE rn WHEN 3 THEN nm END) nm_3
     , MIN(CASE rn WHEN 3 THEN q1 END) q1_3
     , MIN(CASE rn WHEN 3 THEN q2 END) q2_3
     , MIN(CASE rn WHEN 3 THEN q3 END) q3_3
     , MIN(CASE rn WHEN 4 THEN nm END) nm_4
     , MIN(CASE rn WHEN 4 THEN q1 END) q1_4
     , MIN(CASE rn WHEN 4 THEN q2 END) q2_4
     , MIN(CASE rn WHEN 4 THEN q3 END) q3_4
  FROM (SELECT id, nm
             , q1, q2, q3
             , ROW_NUMBER() OVER(PARTITION BY id ORDER BY nm) rn
          FROM t
        ) a
 GROUP BY id
;



 

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