블로그 이름

[ERROR] SyntaxErrorException: 'i.test’ isn’t in GROUP BY 에러 본문

개발/오류

[ERROR] SyntaxErrorException: 'i.test’ isn’t in GROUP BY 에러

Hide 2026. 1. 7. 22:53

SQL문 실행 중 예외가 발생. 에러 메세지는 다음과 같다.

Cause: java.sql.SQLSyntaxErrorException: 'i.test’ isn’t in GROUP BY ...

딱봐도 GROUP BY 절 문제 같아 보인다.

해당 에러는 MySQL/MariaDB 환경에서 GROUP BY 문법 규칙을 위반했을 때 발생하는 오류이다.

 

SQL문은 다음과 같다.

SELECT i.id, i.test, COUNT(*) AS cnt
FROM item i
GROUP BY i.id;

 

ORACLE 이나, 일반적인 MySQL/MariaDB에서는 발생하지 않으며, sql_mode 에 ONLY_FULL_GROUP_BY 옵션이 활성화되어 있는 환경에서 발생한다.

 

GROUP BY 같은 경우 SELECT 절에 있는 컬럼이 GROUP BY 에 포함되어 있거나, 집계 함수(COUNT, SUM, MAX, MIN 등) 으로 감싸져 있어야 한다.

 

위 예시 SQL문의 경우 GROUP BY 에 i.id만 존재하고, select절의 cnt는 집계함수이지만 select절의 i.test가 groupby나 집계함수로 묶여있지 않아 DB에서 어떤 기준으로 i.test 값을 선택해야 할지 모호하다고 판단하여 에러가 발생한다.

 

ONLY_FULL_GROUP_BY 같은 경우 MySQL의 SQL Mode 중 하나로, 모호한 GROUP BY 쿼리를 허용하지 않게 하는 옵션이다.

 

해결 방법으로는 2가지가 있다.

1. ONLY_FULL_GROUP_BY 옵션 비활성화 ( 해당 옵션을 미사용 하는 경우 위 에러가 발생하지 않으나 대신 SELECT 절의 i.test 값이 쿼리 실행 시마다 결과가 다르게 표시될 수 있다는 단점이 있다.)

  > 비활성화 같은 경우 my.ini 설정 파일에서 수정하거나

SET GLOBAL log_bin_trust_function_creators = 1;
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));

 

로 설정 변경이 가능하다. 하지만 타 쿼리에 영향을 미치거나 설명한 바와 같이 단점이 존재하므로 문법을 맞추는 것을 추천

 

2. SQL 표준 준수 (i.test를 집계 함수로 사용하거나, GROUP BY 절에 추가해주면 된다.)

 

나같은 경우 i.id와 i.test 가 1:N 관계라, GROUP BY에 i.test 를 추가하는 경우 결괏값이 뻥튀기 되어 i.test 에 집계함수를 사용하여 해결하였다.