Error Code: 1055. Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'sinsaegebookdb.Orders.saleprice' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
MySQL문 작성 도중 에러 코드가 발생하였는데 위의 해러코드의 원인은
MySQL 5.7.5 버전기준 이후부터,
[선택 목록, 조건 또는 목록이 절에 이름이 지정되지 않은 집계되지 않은 열을 참조하는 쿼리를
허용하지 않습니다]
라고 정의가 변경되어서 에러가 뜬 것이었다.
ONLY_FULL_GROUP_BY,NO_AUTO_CREATE_USER,STRICT_TRANS_TABLES,
NO_ENGINE_SUBSTITUTION
@@sql_mode가 위의 기본값으로 세팅되어 있기 떄문이다.
sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
를 입력하여 쿼리를 날려 그룹바이의 규칙을 이전의 기준으로 돌려놓으면 된다.
mysql> SHOW VARIABLES LIKE 'sql_mode';
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| sql_mode | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
mysql> SELECT @@sql_mode;
+-----------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-----------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------------------------------------------------------+
두 가지 방법으로 sql_mode를 조회하고 여기서 ONLY_FULL_GROUP_BY를 지워주면 된다.
지우는 코드는 아래와 같다.
mysql> SET @@SQL_MODE='NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
Query OK, 0 rows affected, 1 warning (0.00 sec)
이후 다시 SHOW VARIABLES LIKE 'sql_mode'; 코드를 통해 지워진 것을 확인할 수 있다.
mysql> SHOW VARIABLES LIKE 'sql_mode';
+---------------+--------------------------------------------------------------------------------+
| Variable_name | Value |
+---------------+--------------------------------------------------------------------------------+
| sql_mode | NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+---------------+--------------------------------------------------------------------------------+