2016-08-05 4 views
0

Я искал решения, но все, похоже, нужно заменить WHERE HAVING. Я не считаю, что это имеет ту же проблему, и я не могу понять, что может быть неправильным. Я попытался заменить разные части кода, где у меня были ссылки и любые агрегированные функции в предложении WHERE, но я все еще остаюсь с той же ошибкой. Ниже приведен весь мой оператор MySQL, который извлекает статистику для продавцов и их производительность за выбранный период.ошибка: 1111 Недопустимое использование групповой функции

SELECT users.name AS sellername, users.id AS sellerid, `providers`.`id`, providers.name AS providername, 
COUNT(sales.id) as brutto, COUNT(sale_netto.id) as netto, AVG(sale_quality.grade) as grade, 
SUM(COUNT(sales.id)-COUNT(sale_netto.id)) as diff, (COUNT(sales.id)/COUNT(sales.id)+COUNT(sale_netto.id))*100 AS perc 
FROM `product_regretrules` 
LEFT JOIN `product_categories` ON `product_categories`.`id` = `product_regretrules`.`product_category_id` 
LEFT JOIN `product_product_category` ON `product_product_category`.`product_category_id` = `product_categories`.`id` 
LEFT JOIN `products` ON `products`.`id` = `product_regretrules`.`product_id` 
OR `products`.`id` = `product_product_category.product_id` 
LEFT JOIN `sales` ON `sales`.`product_id` = `products`.`id` 
LEFT JOIN `sale_netto` ON `sale_netto`.`sale_id` = `sales`.`id` 
LEFT JOIN `users` ON `users`.`id` = `sales`.`seller_id` 
LEFT JOIN `providers` ON `providers`.`id` = `products`.`provider_id` 
LEFT JOIN `sale_quality` ON `sale_quality`.`sale_id` = `sales`.`id` 
WHERE `sale_netto`.`upload_id` = 725 
AND `sale_netto`.`id` is not null 
AND `sales`.`sell_date` between 2015-12-04 and 2016-08-06 
AND `product_regretrules`.`deleted_at` is null 
GROUP BY `users.id`, `providers`.`id` 

Пожалуйста, посмотрите на эту проблему с запросом, я не заинтересован в ответах или замечания о том, как получить правильные номера/статистика.

+0

Кажется, эта часть была причиной вопроса 'SUM (COUNT (sales.id) -COUNT (sale_netto.id)), как дифф' Я бы ответил, но Я не уверен, почему это вызвало проблему, поэтому я надеюсь, что кто-то сможет объяснить. – Matkey

ответ

0

Попробуйте использовать это для GROUP BY:

GROUP BY users.name, users.id, `providers`.`id`, providers.name 

Вы можете иметь строгий GROUP BY режим на. Это заставляет MySQL следовать стандарту ANSI и не допускать «голых» столбцов в SELECT в запросе агрегации.

В качестве альтернативы, вы можете изменить SELECT к:

SELECT MAX(users.name) AS sellername, users.id AS sellerid, 
     `providers`.`id`, MAX(providers.name) AS providername, 

EDIT:

О, при ближайшем рассмотрении, я вижу проблему. У вас есть:

SUM(COUNT(sales.id)-COUNT(sale_netto.id)) as diff 

Вы не можете встраивать функции агрегации. Предположительно, вы намерены:

(COUNT(sales.id)-COUNT(sale_netto.id)) as diff 
+0

Спасибо, но все та же ошибка. Удаление GROUP BY по-прежнему дает ту же ошибку для запроса. – Matkey

+0

Правило, которое было сделано до ответа ниже. Благодаря! – Matkey

0

Вы не можете агрегировать над агрегатами: SUM(COUNT(sales.id)-COUNT(sale_netto.id)).

Перепишите свой запрос так:

SELECT sellername, sellerid, id, providername, brutto, netto, grade, sum(diff), perc 
FROM 
(
SELECT users.name AS sellername, users.id AS sellerid, `providers`.`id`, providers.name AS providername, 
COUNT(sales.id) as brutto, COUNT(sale_netto.id) as netto, AVG(sale_quality.grade) as grade, 
COUNT(sales.id)-COUNT(sale_netto.id) as diff, (COUNT(sales.id)/COUNT(sales.id)+COUNT(sale_netto.id))*100 AS perc 
FROM `product_regretrules` 
LEFT JOIN `product_categories` ON `product_categories`.`id` = `product_regretrules`.`product_category_id` 
LEFT JOIN `product_product_category` ON `product_product_category`.`product_category_id` = `product_categories`.`id` 
LEFT JOIN `products` ON `products`.`id` = `product_regretrules`.`product_id` 
OR `products`.`id` = `product_product_category.product_id` 
LEFT JOIN `sales` ON `sales`.`product_id` = `products`.`id` 
LEFT JOIN `sale_netto` ON `sale_netto`.`sale_id` = `sales`.`id` 
LEFT JOIN `users` ON `users`.`id` = `sales`.`seller_id` 
LEFT JOIN `providers` ON `providers`.`id` = `products`.`provider_id` 
LEFT JOIN `sale_quality` ON `sale_quality`.`sale_id` = `sales`.`id` 
WHERE `sale_netto`.`upload_id` = 725 
AND `sale_netto`.`id` is not null 
AND `sales`.`sell_date` between 2015-12-04 and 2016-08-06 
AND `product_regretrules`.`deleted_at` is null 
GROUP BY `users.id`, `providers`.`id` 
) as t 
GROUP BY sellername, sellerid, id, providername, brutto, netto, grade, perc; 
Смежные вопросы