안녕하세요.
mysql 사용중이며 표준을 지키기 위해 ONLY_FULL_GROUP_BY 설정을 하였습니다.
ONLY_FULL_GROUP_BY 설정을 하기 전에는 조회에 대해 지정한 컬럼이 중복이 될 경우 맨 위 로우만 가져오게 하려면
SELECT 지정한컬럼, 그외컬럼1, 그외컬럼2 FROM 테이블명 GROUP BY 지정한컬럼
이런식으로 쿼리를 작성했었습니다.
ONLY_FULL_GROUP_BY 를 적용하고 위와 같은 쿼리는 실행이 안되며
SELECT FROM 사이에 지정한 컬럼을 모두 GROUP BY에 넣으면 조회가 되지만 조회내용이 달라져 버립니다.
이를 어떻게해야 기존과 같이 중복을 제거하여 조회를 할 수 있을까요??
표준을 따르지 않았던 기존 쿼리나
표준을 따라 MAX 를 적용한 쿼리나
두가지 다 성능이 문제가 아니라. 문제가 뭔지 모르는게 문제입니다.
정확하게 원하는 것이 무었인지 파악하고 그에 맞게 코딩해야 합니다.
조회 기준을 명확하게 잡으셔야 합니다.
특정 기준으로 중복을 제거한다면? ==> Group By
나머지 항목에 대한 조회는 집계처리로 해야 합니다. ==> sum, avg, count, max, min, ...
기존 쿼리는 조회된 집합에서 그룹기준으로 가장 먼저 읽어들인 자료가 나올 것으로 예상됩니다.
어떤 자료가 먼저 읽히게 될지는 단정지을 수 없습니다.
조회되는 항목들은 동일 행의 자료일 것입니다.
MAX 쿼리는 전혀 다릅니다.
여러 건의 자료중 해당항목의 MAX 값을 가져오게 됩니다.
항목별로 MAX 를 가져오므로 항목별로 다른행의 자료가 될 것입니다.
두 쿼리 모두 기준이 모호한 쿼리입니다.
기준을 명확하게 하셔야 합니다.