postgresql 특정 컬럼 중복값 제외 조회 하고싶습니다. 0 6 864

by 아이언조 [SQL Query] [2021.08.11 18:23:38]


 

현재

col1 col2
A 123
B 456
C 789
D 999
A 000

결과

col1 col2
B 456
C 789
D 999

이렇게 되어있는 상태에서 조회할때 현재 col1 컬럼 기준으로 중복컬럼값인 A를 제외 하여 나머지 데이터만 조회하고싶습니다.

distinct는 중복값중 하나만 보여주는거며 , row_number() over 도 써봤는데 groupby 를 사용하게되면 col1, col2 모두 잡아버리니까

row는 중복이 아니라서 결국 다 출력이 되는데 어떻게 해야지 결과 처럼 출력을할수있을까요?

by pajama [2021.08.11 19:06:13]

count over로 제외해보았습니다.

with t (col1, col2) as (
select 'A', '123' union all
select 'B', '456' union all
select 'C', '789' union all
select 'D', '999' union all
select 'A', '000' 
)
select col1, col2
from (select col1, col2, count(*) over (partition by col1) cnt from t) as tmp
where cnt = 1

 


by 아이언조 [2021.08.12 09:03:06]

감사합니다 값이 동적이라서 유니온으로 할당할수없었는데

이 방식은 다른작업을 할때 참고할수있으것같습니다

다시 한번 감사합니다


by 마농 [2021.08.12 09:33:57]

union 을 하라는 의미가 아닙니다.
with () 구문 없다고 생각하고 아래쪽 쿼리 작성 스타일을 참고하시면 됩니다.


by 아이언조 [2021.08.12 10:15:25]

넵 이해했습니다

이렇게 하는 방법도 있었네요 쿼리의 속도만 다를뿐 결과값은 같네요

모르고 넘어갈뻔 했습니다 감사합니다.

 


by 마농 [2021.08.12 08:00:08]
SELECT col1
     , MIN(col2) col2
  FROM t
 GROUP BY col1
HAVING COUNT(*) = 1
;

 


by 아이언조 [2021.08.12 09:11:55]

감사합니다 

쿼리작성하다 작성해주신 쿼리처럼 비슷하게 나왔던것같은데 헷갈려서 정확히 작성하지는 못했네요

이렇게 작성해주신 쿼리를 보면 이해할수있지만 왜 이러헥 작성하는건 헷갈릴까요..ㅠ?

답변 정말 감사합니다

 

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