2010-06-07 3 views
5

Sto riscontrando alcuni problemi nella creazione di una query che mi fornisce la media di una somma. Ho letto alcuni esempi qui in StackOverflow e non ho potuto farlo. Qualcuno può aiutarmi a capire come farlo per favore? Questi sono i dati che ho:Media di una somma nella query Mysql

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  

Fondamentalmente ho bisogno del valore medio della transazione dal cassiere. Non riesco a eseguire un avg di base perché prenderà tutte le righe ma ogni transazione può avere più righe. Alla fine voglio avere:

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

Questa è la domanda che devo sommare i transazioni, ma non so come o dove includere la funzione AVG.

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'}) 

Qualsiasi aiuto è apprezzato.

risposta

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 secondi prima, cancellato il mio (anche se non ricordo una sintassi d {} su MySQL?). non c'è bisogno di sapere l'ammontare di una transazione se sta andando in media. – Wrikken

+1

Nota a margine: la soluzione migliore, ma perché copiare la clausola HAVING, anziché solo un WHERE che dovrebbe essere usato? – Wrikken

+0

+1 funziona. Bella soluzione se l'HAVING è fisso. –

-3

Questo è il modo più semplice che conosco.

SELECT answers, AVG(score) 
FROM tests