Tip

this is incompatible with sql_mode=only_full_group_by

  • -
반응형

최근 MySQL를 새로 설치하고 기존 쿼리를 실행하던 중 발생한 오류입니다.

SQL Error [1055] [42000]: (conn=43) Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'Y.LEDGER_KIND_NAME' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

 

문제가 발생한 쿼리는 다음과 같습니다. 

 SELECT Y.PARENT_KIND
     , Y.LEDGER_KIND_NAME
     , SUM(IF('0' = '0', -Y.AMOUNT, Y.AMOUNT)) AS AMOUNT
  FROM (
        ...

       ) Y
GROUP BY Y.PARENT_KIND
ORDER BY SUM(Y.AMOUNT) DESC

 

해당 오류는 MySQL 5.7 이상에서 발생할 수 있는 오류입니다.

GROUP BY를 사용할 때, SELECT절, HAVING절, ORDER BY절에 등장하는 컬럼 중에서 집계함수(예: SUM, COUNT 등)로 묶이지 않은 컬럼은 반드시 GROUP BY절에 명시해야 합니다.

위 쿼리에는 Y.LEDGER_KIND_NAME이 집계함수로 묶이지 않아 오류가 발생했습니다.

쿼리를 수정하는 것이 좋겠지만 MySQL 옵션을 변경하여 오류를 해결할 수도 있습니다.

 

현재 PC는 brew를 통해 MySQL이 설치한 것이 아닌 되어 있지 않아 my.cnf 설정 파일을 찾을 수 없습니다. 

Community Server를 통해 직접 설치한 경우, 시스템 설정에서 MySQL을 검색해서 아래와 같이 Configuration을 통해 my.cnf 파일을 설정할 수 있습니다.

 

터미널을 실행하고 Base Directory에 들어가 my.cnf 파일을 생성합니다.

sudo vim my.cnf

 

아래 내용을 저장합니다.

[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

 

 

Configuration File에 my.cnf 파일을 등록합니다.

 

Instances 탭으로 이동해 MySQL을 재실행합니다.(Stop Server 이후 Start Server)

이후 쿼리를 실행해보면 정상 조회되는 것을 확인할 수 있습니다.

 

 

※ 참고

아래 쿼리를 통해 설정된 정책을 확인할 수 있습니다.

select @@sql_mode;

 

반응형
Contents

포스팅 주소를 복사했습니다.

이 글이 도움이 되었다면 공감 부탁드립니다.