| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- MySQL
- 삼성증권
- http
- 티스토리챌린지
- 영상편집
- 톰캣
- 컨트롤러
- 스레드
- Tomcat
- MariaDB
- START WITH
- integer
- java
- Docker
- 키보드
- API
- 스레드 덤프
- Database
- equals
- 프로세스
- ibatis
- wsdl
- letterspacing
- Linux
- cmd
- JDBC
- 안드로이드 스튜디오
- HTML
- 오블완
- oracle
- Today
- Total
블로그 이름
[ERROR] SyntaxErrorException: 'i.test’ isn’t in GROUP BY 에러 본문
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 에 집계함수를 사용하여 해결하였다.
'개발 > 오류' 카테고리의 다른 글
| [ERROR] NonUniqueResultException: result returns more than one elements (0) | 2025.12.22 |
|---|---|
| [ERROR] Failed to start component (0) | 2025.11.16 |
| [ERROR] npx 실행 시 npm 에러 발생하는 현상 (0) | 2025.10.12 |
| [ERROR] Node.js 설치 후 npm -v 에러 발생 (0) | 2025.10.12 |
| [ERROR] ResourceAccessException: I/O error on POST request for "URL": Error writing request body to server (0) | 2025.09.28 |