[MySQL] group by 절에 포함되지 않는 column select 관련 config (ONLY_FULL_GROUP_BY)

Jinbro·2022년 8월 25일
0

sql

목록 보기
3/3

문제인식

  • 아래 샘플 쿼리는 only_full_group_by ERROR 가 발생한다.
-- GROUP BY 를 활용한 평균 환전 금액 SELECT
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 -- M.NAME 포함 X => only_full_group_by ERROR 발생!

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 절에 포함시키자!

참고

profile
자기 개발 기록 저장소

0개의 댓글