[Mysql] isn't in group by 에러

Jae-hyeong Lee·2022년 5월 23일
0

Error querying database. Cause: java.sql.SQLSyntaxErrorException: (conn=11281) 'wize_idpp2.Y.CD_NM' isn't in GROUP BY

group by 절에 포함되지 않은 칼럼(집계되지 않은 칼럼(nonaggregated column))을 select 절에서 뽑아올 경우, 어느 칼럼을 표시해야 할 지 몰라 exception 이 발생하는 현상이다.

  • 동일한 쿼리를 ORACLE 에서 실행시 적합하지 않은 group by 사용으로 exception 이 발생한다.

  • mysql 에서 실행시 only_full_group_by 옵션의 활성화/비활성화 상태에 따라 exception이 발생/발생하지 않는다. mysql 5.7부터 생긴 옵션이기 때문에 이전까지는 잘 되다가 5.7버전으로 옮기면서 발생할 수 있다.

해결 방법
1. 쿼리를 수정.
1-1) group by 절에 nonaggregated column 추가
1-2) group by 대신 서브쿼리 사용(경우에 따라 left outer join 사용)
1-3) select 절의 집계되지 않은 칼럼에 ANY_VALUE(칼럼) 함수 추가

2. 설정 수정.
mysql 내의 설정을 수정 하는 방법과 설정 파일을 직접 수정하는 방법이 있다.

mysql 내 설정 수정
/ 확인 /
SELECT @@sql_mode;
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
/ 셋팅 /
SET GLOBAL sql_mode = 'modes';
SET SESSION sql_mode = 'modes';
/ ex /
SET @@SESSION.sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
/ 제거 /
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

설정 파일 수정
1) cd /etc/mysql/mysql.conf.d
2) vi mysqld.cnf
다음 내용 추가
[mysqld] sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
3) 서버 재시작
service mysql restart

sql mode 참고
https://mariadb.com/kb/en/sql-mode/

profile
심심하오

0개의 댓글

관련 채용 정보