2016-12-21 2 views
0

Этот запрос mysql дает мне количество продаж моих продуктов (total и total_staff), сгруппированных по дням и часам дня. Я хочу, чтобы сумма всего и total_staff для каждого продукта (не сгруппированы ничем, ожидайте по id). Могу ли я сделать это в том же запросе?COUNT итого группы mysql

SELECT p.name, p.color, DATE(date_create) as jour,HOUR(date_create) AS h, 
SUM(CASE WHEN s.staff=0 THEN 1 ELSE 0 END) as total, 
SUM(CASE WHEN s.staff=1 THEN 1 ELSE 0 END) as total_staff 
FROM manifsSubCategories msc 
LEFT JOIN products_subCategories psc ON msc.id=psc.manifSubCategory_id 
LEFT JOIN sales s ON psc.product_id=s.product_id 
LEFT JOIN products p ON psc.product_id=p.id 
LEFT JOIN manifsCategories ON manifCategory_id=manifsCategories.id 
WHERE manifCategory_id=1 AND s.category_id=1 GROUP BY jour,h ORDER BY p.id DESC 

ответ

0

Просто опускаем другие столбцы:

SELECT p.name, 
    SUM(CASE WHEN s.staff=0 THEN 1 ELSE 0 END) as total, 
    SUM(CASE WHEN s.staff=1 THEN 1 ELSE 0 END) as total_staff 
FROM manifsSubCategories msc 
LEFT JOIN products_subCategories psc ON msc.id=psc.manifSubCategory_id 
LEFT JOIN sales s ON psc.product_id=s.product_id 
LEFT JOIN products p ON psc.product_id=p.id 
LEFT JOIN manifsCategories ON manifCategory_id=manifsCategories.id 
WHERE manifCategory_id=1 AND s.category_id=1 
GROUP BY p.name 
ORDER BY p.id DESC 

BTW - Ваша статья WHERE неправильно. Вы фильтруете по таблице для LEFT JOIN, это превратит ваше соединение в inner join из-за сравнения NULL.
Условия в правой таблице левого соединения должны быть помещены только в пункт ON.

+0

Спасибо! Но могу ли я использовать только первый запрос, т. Е. Я хочу новый столбец справа, скажем, * all_total * и * all_total_staff * в конце. Не имеет значения, есть ли у меня одинаковые результаты в каждой строке. – shlagwuk

Смежные вопросы