본문 바로가기
Database/mysql

[MySQL] Error Code: 1140. In aggregated query without GROUP BY,expression #1 of SELECT list contains nonaggregated column %% this is incompatible with sql_mode=only_full_group_by 0.000 sec

by JINJINC 2024. 7. 8.
728x90
반응형

 

Error 코드

Error Code: 1140. In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column  %%%  this is incompatible with sql_mode=only_full_group_by 0.000 sec

 

이 오류는 여러 행에 집계 값을 포함하려고 할 때 발생할 수 있습니다. 예를 들어, 행 그룹 내의 모든 행의 소계를 반환하려고 할 수 있습니다. 윈도우 함수는 이러한 결과를 얻는 데 도움이 될 수 있습니다.

 

첫번째 해결책 . 윈도우 함수 

select  `orderProduct`, `orderId`,sum(orderCount) as `총 주문수량` 
from `Order`
order by  `orderProduct`asc;

여기, 제 목록의 마지막 열이 SELECT문제를 일으키고 있습니다. 저는 SUM()집계 함수를 사용하여 각 구역 내의 모든 주문수량을 계산하려고 합니다.

문제는, 제 쿼리가 불완전하다는 것입니다.  이 쿼리를 수정하려면 윈도우 함수를 도입해야 합니다.

 

select  `orderProduct`, `orderId`,(select sum(orderCount) from `order`) as `총 주문수량` 
from `Order` 
order by  `orderProduct`asc;
select  
	`orderProduct`, 
	`orderId`,
	sum(orderCount)over(partition by `orderProduct`) as `총 주문수량` 
from `Order` 
order by  `orderProduct`asc;

 

구체적으로 함수를 지정해주었다. 

 

두번째 해결책 . 설정 변경

현재의 설정 확인

select @@sql_mode;

 

설정 변경하기 

root 계정에서 설정변경가능
 
set @@global.sql_mode := replace(@@global.sql_mode, 'ONLY_FULL_GROUP_BY', '');
또는
SET @@sql_mode = sys.list_drop(@@sql_mode, 'ONLY_FULL_GROUP_BY');

해당 세션에서 
SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';


확인
#전역
select @@sql_mode;
#세션
SELECT @@SESSION.sql_mode;

 

 

728x90
반응형

댓글