ONLY_FULL_GROUP_BY 설정 사용 중 중복된 로우 제거하려면 어떻게 해야할까요? 0 4 1,110

by mjee [MySQL] [2018.07.24 14:32:01]


안녕하세요.

mysql 사용중이며 표준을 지키기 위해 ONLY_FULL_GROUP_BY 설정을 하였습니다.

 

ONLY_FULL_GROUP_BY 설정을 하기 전에는 조회에 대해 지정한 컬럼이 중복이 될 경우 맨 위 로우만 가져오게 하려면

SELECT 지정한컬럼, 그외컬럼1, 그외컬럼2
FROM 테이블명
GROUP BY 지정한컬럼

이런식으로 쿼리를 작성했었습니다.

ONLY_FULL_GROUP_BY 를 적용하고 위와 같은 쿼리는 실행이 안되며

SELECT FROM 사이에 지정한 컬럼을 모두 GROUP BY에 넣으면 조회가 되지만 조회내용이 달라져 버립니다.

이를 어떻게해야 기존과 같이 중복을 제거하여 조회를 할 수 있을까요??

 

 

by 카포 [2018.07.24 14:51:36]

중복제거는 distinct 하면 됩니다. 


by mjee [2018.07.24 14:58:20]

카포님 답변 감사드립니다.

SELECT DISTINCT A.지정한컬럼, A.그외컬럼1, B.그외컬럼2
FROM 테이블명 A, 테이블명2 B

위와 같이 DISTINCT를 사용해도 중복제거가 되지않습니다.

제가 잘못사용하는걸까요?

SELECT DISTINCT (A.지정한컬럼)
FROM 테이블명 A, 테이블명2 B

이렇게하면 지정한컬럼 중복제거되어 잘 나옵니다..


by mjee [2018.07.24 15:18:29]
SELECT 지정한컬럼, MAX(그외컬럼1), MAX(그외컬럼2)
FROM 테이블명
GROUP BY 지정한컬럼

위와 같은방식으로 해결했습니다..

이렇게 조회하면 쿼리성능에 지장이없을까요?


by 마농 [2018.07.24 15:43:52]

표준을 따르지 않았던 기존 쿼리나
표준을 따라 MAX 를 적용한 쿼리나
두가지 다 성능이 문제가 아니라. 문제가 뭔지 모르는게 문제입니다.
정확하게 원하는 것이 무었인지 파악하고 그에 맞게 코딩해야 합니다.
조회 기준을 명확하게 잡으셔야 합니다.
특정 기준으로 중복을 제거한다면?  ==> Group By
나머지 항목에 대한 조회는 집계처리로 해야 합니다. ==> sum, avg, count, max, min, ...
기존 쿼리는 조회된 집합에서 그룹기준으로 가장 먼저 읽어들인 자료가 나올 것으로 예상됩니다.
어떤 자료가 먼저 읽히게 될지는 단정지을 수 없습니다.
조회되는 항목들은 동일 행의 자료일 것입니다.
MAX 쿼리는 전혀 다릅니다.
여러 건의 자료중 해당항목의 MAX 값을 가져오게 됩니다.
항목별로 MAX 를 가져오므로 항목별로 다른행의 자료가 될 것입니다.
두 쿼리 모두 기준이 모호한 쿼리입니다.
기준을 명확하게 하셔야 합니다.

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