본문 바로가기

삽질

MySQL 1140 에러


ERROR 1140: Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns isillegal if there is no GROUP BY clause


SUM, COUNT, AVG, MIN, MAX 등의 함수와 일반 컬럼을 동시에 사용하기위해서는 GROUP BY 절이 필요합니다. 다음과 같은 SQL도 동일한 에러를 발생시킵니다.


SELECT owner, COUNT(*) FROM pet;


하지만 GROUP BY를 사용하면 각 그룹별로 나누어서 보여주기 때문에, 전체행에 대한 여러 값을 구할 수가 없습니다. 이럴 때는 GROUP BY NULL 을 사용해서 그룹을 만들지 않고 모든 행을 연산할 수 있습니다.


SELECT
COUNT( DISTINCT `Data`.data_id ) AS `used`,
(SELECT COUNT(*) FROM works WHERE place = `Data`.charge_place AND fstate = '신청접수' ) AS `applied`
FROM `users` AS `User` LEFT JOIN
(SELECT `Data`.id as data_id, charge_uid, charge_place, partner_uid, partner_place, fstate, sstate FROM works AS `Data` LEFT JOIN `work_loans` AS `DataLoan` ON `Data`.id = `DataLoan`.data_id WHERE 1=1 ) AS `Data` ON `User`.uid = `Data`.charge_uid
WHERE `User`.role IN ('bm', 'b')
GROUP BY NULL