2016-04-01 7 views
0

Ich versuche, eine Verkaufsberichtabfrage auszuführen.GROUP BY verursacht Probleme mit SUM()

Die Summe, die ich kaufe unter Verwendung SUM() bin, ist nicht korrekt: es scheint, dass das Problem mit meinem GROUP BY sein könnte.

Die Abfrage:

SELECT salesreport.canprevid, 
    storelist.organization, 
    SUM(quantity * unitprice * (100 - discount)/100) AS total, 
    storelist.external_manager, 
    storelist.manager 
    FROM storelist 
    INNER JOIN salesreport 
    ON storelist.store_id = salesreport.canprevid 
    WHERE salesreport.date >= "2016-01-01" 
    AND salesreport.date <= "2016-01-31" 
    GROUP BY canprevid 
    ORDER BY organization DESC; 

Wie erwartet, ich bin ziehen können:

|canprevid|organization|total (for the month of january 2016)| external manager| manager 

jedoch, wenn ich eine Gesamtsumme von total tun, SUM() verwenden, total tut nicht gleich was ist die wahre Gesamtmenge für den Monat, sagen Januar 2016.

Ich bin nicht sicher, warum einige Datensätze entfernt werden oder wenn GROUP BY Probleme mit den Berechnungen verursacht.

+1

nicht trennen Sie Spaltennamen von | Es ist schwer zu lesen, stattdessen verwenden Komma (,) – geeksal

+1

bitte ein Schema Ihrer Tabellen und SQL-Geige mit Beispieldaten, so dass wir an Ihrer Abfrage arbeiten können. Wenn Sie nicht über Sql Geige wissen, googeln Sie es einfach. – geeksal

+2

INNER JOIN Salesreport ON storelist.store_id = salesreport.canprevid kann nicht allen Datensätzen beitreten, wenn sie nicht korrekt zugeordnet sind. Versuchen Sie GROUP BY zuerst zu löschen und überprüfen Sie, ob alle'report'-Datensätze vorhanden sind. –

Antwort

1

hinzufügen storelist.organization zu Ihrem GROUP BY:

SELECT salesreport.canprevid, 
    storelist.organization, 
    SUM(quantity * unitprice * (100 - discount)/100) AS total, 
    storelist.external_manager, 
    storelist.manager 
    FROM storelist 
    INNER JOIN salesreport 
    ON storelist.store_id = salesreport.canprevid 
    WHERE salesreport.date >= "2016-01-01" 
    AND salesreport.date <= "2016-01-31" 
    GROUP BY salesreport.canprevid, storelist.organization 
    ORDER BY storelist.organization DESC;