2016-12-21 5 views
0

Diese mysql Abfrage gibt mir die Anzahl der Verkäufe meiner Produkte (total und total_staff) nach Tagen und Stunden des Tages gruppiert. Ich möchte die Summe von insgesamt und total_staff für jedes Produkt (nicht gruppiert nach nichts, erwarten durch ID). Kann ich das in derselben Abfrage tun?COUNT Summe der Gruppe von 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 

Antwort

0

auslassen Sie die anderen Spalten:

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 - Ihre WHERE Klausel ist falsch. Sie filtern nach einer Tabelle für die LEFT JOIN, dies wird Ihre Verbindung in eine inner join aufgrund NULL Vergleich.
Bedingungen in der rechten Tabelle einer linken Verknüpfung sollten nur innerhalb der ON Klausel platziert werden.

+0

Danke! Aber kann ich nur die erste Abfrage verwenden, d. H. Ich möchte eine neue Spalte auf der rechten Seite mit sagen wir * all_total * und * all_total_staff * am Ende. Es spielt keine Rolle, ob ich in jeder Zeile die gleichen Ergebnisse erziele. – shlagwuk