2010-06-07 15 views
5

Ich habe einige Probleme beim Erstellen einer Abfrage, die mir den Durchschnitt einer Summe gibt. Ich habe ein paar Beispiele hier im Stackoverflow gelesen und konnte es nicht tun. Kann mir bitte jemand helfen, das zu verstehen? Dies sind die Daten, die ich habe:Durchschnitt einer Summe in Mysql Abfrage

Transaction_x0020_Number Product_x0020_Code Sales_x0020_Value Date  Cashier 
000356     350     24.99    2010-06-04 131  
000356     726     32.99    2010-06-04 131  
000357     350     24.99    2010-06-04 131  
000358     350     24.99    2010-06-04 131  
000358     360     24.99    2010-06-04 131  
000770     703     69.99    2010-06-04 130  
000771     726     32.99    2010-06-04 130  
000772     1126    5     2010-06-04 130  
000773     482     32.99    2010-06-04 130  
000774     600     32.99    2010-06-04 130  
000775     350     24.99    2010-06-04 130  

Grundsätzlich brauche ich den durchschnittlichen Transaktionswert von Kassierer. Ich kann kein grundlegendes avg ausführen, weil es alle Reihen nimmt, aber jede Verhandlung kann mehrere Reihen haben. Am Ende möchte ich muss:

Cashier| Average| 
131 | 44.31 |(Which comes from the sum divided by 3 transactions not 5 rows) 
130 | 33.15 | 
etc. 

Dies ist die Abfrage Ich habe die Transaktionen zu summieren, aber nicht wissen, wie oder wo die AVG-Funktion enthalten.

SELECT `products`.`Transaction_x0020_Number`, 
     Sum(`products`.`Sales_x0020_Value`) AS `SUM of Sales_x0020_Value`, 
     `products`.`Cashier` 
    FROM `products` 
GROUP BY `products`.`Transaction_x0020_Number`, `products`.`Date`, `products`.`Cashier` 
    HAVING (`products`.`Date` ={d'2010-06-04'}) 

Jede Hilfe wird geschätzt.

Antwort

14
SELECT Cashier, 
     Sum(Sales_x0020_Value)/COUNT(DISTINCT Transaction_x0020_Number) AS 'avg' 
FROM products 
WHERE Date = {d'2010-06-04'} 
GROUP BY Cashier 
+0

Ah, 8 Sekunden zuvor, gelöscht meine (obwohl ich nicht erinnern, eine d {} Syntax auf MySQL?). es ist nicht nötig, die Höhe einer Transaktion zu kennen, wenn sie tatsächlich gemittelt wird. – Wrikken

+1

Eine Randnotiz: Beste Lösung, aber warum die HAVING-Klausel kopieren, anstatt nur eine WHERE, die verwendet werden sollte? – Wrikken

+0

+1 das funktioniert. Nette Lösung wenn das HAVING behoben ist. –

-3

Das ist die einfachste Art, die ich kenne.

SELECT answers, AVG(score) 
FROM tests