그룹핑할때 조건을 넣는데 막힙니다. 0 2 990

by 휴 [SQL Query] 오라클 sql query [2020.05.18 18:34:43]


이름 별명 데이터 데이터타입
aa bb 123 X
aa bb 345 Y

현재는 gruop by 를 이름, 별명, 데이터 타입으로 묶어서 가져오고 있는데, 

여기서 조건을 추가하여 이름, 별명 그룹핑한 후 데이터 타입 X 가 있을 경우엔 X의 데이터를 가져오고,

없으면 Y, Y도 없으면 Z 이런식으로 쿼리를 짜려고 합니다

 

select 이름, 별명, 데이터타입, max(데이터) as 데이터
from 테이블 A
group by 이름, 별명, 데이터타입;

 

여기서 더 진도를 못나가겠네요.. 이런 저런 방법을 해봤는데 떠오르질 않아서 문의드립니다 

감사합니다

by 마농 [2020.05.18 22:42:48]
SELECT 이름, 별명
     , MIN(데이터타입) 데이터타입
     , COALESCE( MAX(DECODE(데이터타입, 'X', 데이터))
               , MAX(DECODE(데이터타입, 'Y', 데이터))
               , MAX(DECODE(데이터타입, 'Z', 데이터))
               ) AS 데이터
  FROM 테이블
 GROUP BY 이름, 별명
;

SELECT 이름, 별명
     , MIN(데이터타입) 데이터타입
     , MAX(데이터) KEEP(DENSE_RANK FIRST ORDER BY 데이터타입) 데이터
  FROM 테이블
 GROUP BY 이름, 별명
;

SELECT *
  FROM (SELECT 이름, 별명, 데이터타입, 데이터
             , ROW_NUMBER() OVER(PARTITION BY 이름, 별명 ORDER BY 데이터타입, 데이터 DESC) rn
          FROM 테이블
        )
 WHERE rn = 1
;

 


by 휴 [2020.05.19 09:43:07]

감사합니다 coalesce 라는 함수가 있는줄 몰랐네요 

정말 다양한 방법으로 구현이 가능하군요

글쓰고 나서 저는 도저히 모르겠어서 order by 에 case 를 넣어서 가져오는 형태로 구현해봤는데

공부 많이 해야겠네요 

 

답변감사드립니다

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