Ich habe eine Tabelle mit POS-Transaktionsdaten und versuche, einige unserer Kaufinformationen zu aggregieren. Ein Beispiel könnte wie aussehenBehandeln von fehlenden Paaren als Null bei der Berechnung eines Durchschnitts in SQL
pID (int) | pDate (varchar) | pAmount(numeric) | pCode(varchar)
1 | 01-NOV-14 | 12.67 | ELECTRONIC
2 | 01-NOV-14 | 61.89 | HOUSEWARE
3 | 01-NOV-14 | 52.25 | ELECTRONIC
4 | 02-NOV-14 | 9.12 | HOUSEWARE
5 | 02-NOV-14 | 17.11 | ELECTRONIC
6 | 03-NOV-14 | 39.88 | HOUSEWARE
7 | 03-NOV-14 | 21.60 | ELECTRONIC
8 | 03-NOV-14 | 16.78 | HOUSEWARE
9 | 04-NOV-14 | 47.29 | HOUSEWARE
Mein Ziel ist es, den durchschnittlichen täglichen Verkaufsbetrag zu berechnen, gruppiert nach Kategorie. Mein Problem ist, dass es eine inkonsistente Anzahl von Verkaufseinträgen pro Tag gibt. Daher muss ich die tägliche Summe für jede Kategorie vor der Aggregation abrufen.
Für dieses Beispiel mein Ziel wäre eine Abfrage sein, die den Tagesdurchschnitt erzeugt, durch Code gruppiert:
SalesItem | AverageDailySales
ELECTRONIC | 25.91
HOUSEWARE | 43.74
Aber, weil nicht alle Tage haben Verkäufe für alle Kategorien, die tägliche Summe pro Kategorie zu berechnen und die durchschnittliche Einnahme wird nicht funktionieren: die Abfrage
SELECT s.pCode AS SalesItem, TO_CHAR(AVG(s.TotalDaySales), '999.99') AS AverageDailySales
FROM (SELECT t.pDate, t.pCode, SUM(t.pAmount) as TotalDaySales
FROM Pos_Transactions t
GROUP BY t.pDate, t.pCode) s
GROUP BY s.pCode ORDER BY s.pCode;
Ausbeuten
SalesItem | AverageDailySales
ELECTRONIC | 34.54
HOUSEWARE | 43.74
, was die Tatsache ausschließt, dass am 4. November keine elektronischen Verkäufe getätigt wurden und ein höherer durchschnittlicher Verkauf pro Tag impliziert.
Wie kann ich mit den fehlenden Einträgen bei der Berechnung mit AVG umgehen?
Perfect - Aufruf unterscheidet sich von einer verschachtelten Abfrage das Problem mit vkp Antwort festgelegt (wo die Gruppe von nahm precendence) – user2093082