문제인식
- 아래 샘플 쿼리는 only_full_group_by ERROR 가 발생한다.
SELECT M.ID, M.NAME, AVG(EXCHANGE_ACCONT) AS EXCHANGE_ACCONT
FROM MEMBER M, EXCHANGE_HIST E
WHERE M.ID = E.ID
GROUP BY M.ID
this is incompatible with sql_mode=only_full_group_by
- 위 ERROR를 허용할 수 있는 MySQL config 설정이 있을까?
원인분석
- GROUP BY 절에 포함되지 않는 column (집계 함수 제외) 을 SELECT 절에 포함 시킬 경우, 컬럼을 어떤 그룹에 포함시켜야 할 지 모호한 case 가 발생한다.
- MySQL 5.7 version 부터 추가된 설정
해결
- MySQL config only_full_group_by 옵션 활성화/비활성화 설정 가능
- MySQL 옵션 설정 상태 확인
select @@sql_mode;
> ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,...
- ONLY_FULL_GROUP_BY 가 조회될 경우, only_full_group_by ERROR 발생
- MySQL config (mysqld) 변경 후 MySQL 재기동
sql_mode=STRICT_TRANS_TABLES,...
- 샘플 쿼리 SELECT 정상 (ONLY_FULL_GROUP_BY ERROR 발생 X)
결론
- SELECT 절에 포함된 column은 집계 함수 제외하고, GROUP BY 절에 포함시키자!
참고