본문 바로가기

DBMS/MySQL & MariaDB

MySql ONLY_FULL_GROUP_BY ERROR(1055)

  • MySQL에서 ONLY_FULL_GROUP_BY SQL 모드가 활성화되어 있을 때 발생하는 문제이다.
    • 이 모드는 GROUP BY 절에 포함되지 않은 비집계(non-aggregated) 컬럼을 SELECT 문에서 사용하는 것을 허용하지 않는다.
    • GROUP BY에서 지정한 컬럼 이외의 컬럼을 SELECT 리스트에 포함시킬 때, 해당 컬럼을 집계 함수로 감싸야한다.
      • (예: SUM(), AVG(), COUNT() 등)

해결 방법

1. GROUP BY 에 모든 비집계 컬럼 추가

가장 간단한 방법은 GROUP BY 절에 SELECT에서 사용하는 모든 비집계 컬럼을 추가하는거다.
예를 들어, product.product_id 컬럼이 SELECT 목록에 있는데 GROUP BY 절에 포함되지 않은 경우,

GROUP BY에 이 컬럼을 추가하면된다.

SELECT product.product_id, COUNT(*)
FROM product
GROUP BY product.product_id

2. 집계 함수 사용

비집계 컬럼에 대해 집계 함수를 사용하는 방법이다.
예를 들어, product.product_idSELECT 리스트에 포함되지만 GROUP BY에 없는 경우,

이를 집계 함수로 감싸는 방법이다.

SELECT MAX(product.product_id), COUNT(*)
FROM product
GROUP BY some_column;

3. ONLY_FULL_GROUP_BY 모드 비활성화

ONLY_FULL_GROUP_BY 모드를 비활성화하는 방법도 있지만, 이는 권장되지 않는 방법이라한다.
이 모드를 비활성화하면 SQL 쿼리가 제대로 동작하지 않거나 예기치 못한 결과를 초래할 수 있다고한다.

하지만 일시적으로 이 모드를 끄고 싶다면, 아래의 쿼리를 실행하면 된다.

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

'DBMS > MySQL & MariaDB' 카테고리의 다른 글

MySQL 백업 및 복원  (0) 2020.02.18
MySQL 기본 명령어  (0) 2019.03.05
MySQL 저장 엔진과 트랜잭션 처리 (2)  (0) 2017.11.06
MySQL 저장 엔진과 트랜잭션 처리 (1)  (0) 2017.11.02