only full group by 원인 및 해결 방법

송준희·2021년 2월 3일
0

로컬(Window10)에서 개발하고 linux 환경에서 배포하면 가끔씩 only full group by 문제가 발생했다. 테스트를 위해서 간단한 boards 테이블을 만들었다.

원인

select id, count(*) from boards group by user_id; 쿼리문을 실행하면 only full group by 문제가 발생한다. id와 count(*)를 출력할 때 count(*)는 user_id를 기준으로 grouping해서 값을 구할 수 있지만
id를 가져올 때 db에 저장된 id값(1, 2, 3) 중에서 어떤 id를 출력해야 할 지 모르기 때문에 에러가 발생한다.

해결 방법

1. 쿼리문을 수정한다.

group by 절에 nonaggregated column을 추가한다. 혹은 nonaggregated column에 ANY_VALUE()를 통해서 값을 가져온다.

2. mysql 설정 파일(my.cnf)을 수정한다.

(docker 기준) linux에서 /etc/mysql에 가면 mysql 설정 파일인 my.cnf 파일이 있다.
사진처럼 [mysqld] 부분에 sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION를 추가해주고 mysql을 재기동하면 설정파일이 적용된다.
select @@sql_mode; 쿼리문을 통해서 설정이 반영됐는지 확인할 수 있다.
only full group by 에러를 발생시킨 쿼리문을 다시 실행해보면 정상적으로 작동하는 것을 확인할 수 있다.

공식 문서 참고
https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

profile
오늘 달리면 내일 걸을 수 있다!

0개의 댓글