1055: Expression not in GROUP BY (only_full_group_by) (GROUP BY에 없는 표현식)
MySQL의미
GROUP BY에도 없고 집계 함수로 감싸지도 않은 컬럼을 SELECT 목록이나 HAVING/ORDER BY에서 사용했다. ONLY_FULL_GROUP_BY SQL 모드가 활성화되어 있어 MySQL이 이 비결정적 표현식을 거부한다.
원인
쿼리가 그룹화된 컬럼이 아닌 컬럼을 직접 선택하지만, 그 컬럼은 그룹당 단일 값이 아닐 수 있다. ONLY_FULL_GROUP_BY는 MySQL 5.7+에서 기본적으로 활성화되며, 이전의 관대한 GROUP BY 동작에 의존하는 쿼리가 이 오류를 발생시킨다.
해결 방법
컬럼을 GROUP BY 목록에 추가하거나 집계 함수(MAX(), MIN(), ANY_VALUE())로 감싼다. 값이 그룹 내에서 실제로 고유하다는 것을 안다면 ANY_VALUE()로 모호성을 의도적으로 억제한다. 쿼리를 고치는 대신 모드를 비활성화하면(sql_mode에서 ONLY_FULL_GROUP_BY 제거) 잘못된 결과의 위험이 되돌아오므로 피한다.
같은 데이터베이스의 다른 항목
- 1553Cannot drop index needed in a foreign key constraint (외래 키 제약 조건에 필요한 인덱스 삭제 불가)
- 3948Loading local data is disabled; this must be enabled on both the client and server sides (로컬 데이터 로드가 비활성화됨. 클라이언트와 서버 양쪽에서 활성화 필요)
- 1075Incorrect table definition; there can be only one auto column and it must be defined as a key (잘못된 테이블 정의. auto 컬럼은 하나만 가능하며 키로 정의해야 함)
- 1267Illegal mix of collations
- 1030Got error N from storage engine
- 1197Multi-statement transaction required more than 'max_binlog_cache_size' (다중 문장 트랜잭션이 'max_binlog_cache_size'보다 많은 공간을 요구함)
- 1785Statement violates GTID consistency