티스토리 뷰

데이터 중복일때 하나만 조회하기

group by는 데이터의 그룹화 목적이다. 

A(날짜시간), B(IP), C(아이디), D(대화내용) 컬럼이 있다 가정. 

A, B, C, D 컬럼을 전체 조회 하되,, A와 D가 같은 행이 있을때 하나만 출력을 원함. 

group by로 A, D만 묶으면 아래와 같은 에러 발생.

* Oracle : not a GROUP BY expression
* PostgreSQL : column "customers.city" must appear in the GROUP BY clause or be used in an aggregate function
* SQL Server : column "customers.city" is invalid in the select list because it is not contained in either an aggregated function or the GROUP BY clause

지금과 같은 케이스는 대화내용을 조회하는거라,, 
시간과 대화내용이 같으면 IP와 아이디가 같았기에,,  
A, B, C, D 모두를 group by로 묶으면 해결되었다. 

참고로 select 절에 count(*)로 중복된 횟수 확인이 가능하고,, 
group by 밑에 having 절을 사용해서 중복된 내용만 솎아낼수 있었다.
having(*) > 1

기타 해결방법은
1. select 절에 group by 제외하는 컬럼을 집계성으로 사용 --> avg max 등등. 
2. select 문에서 group by 제외되는 컬럼 삭제
3. select 문에 group by에 해당되는 컬럼 추가 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31