2011-01-17 6 views
6

Ho 3 colonne in una tabella denominata "acquisti":Somma di moltiplicazione di colonne per righe con ID simili a MySQL

id   amount   price 
2   2    21 
2   5    9 
3   8    5 

voglio gruppo tutte le righe con ID simili e presentano tale matrice come risultato :

array([0] => [id => 2, total => 87 (because 2*21+5*9=87)], [1] => [id => 3, total => 40 (because 8*5=40)]) 

come conti totali per SUM (importo * prezzo) per le righe con ID simili.

Ho provato con

SELECT id, SUM(p.price*p.amount) total FROM purchases p GROUP by p.id 

ma non funziona bene (vale a dire non raggiunge quello che voglio, che è quello che ho scritto sopra). Qualche idea su come farlo in mysql?

Un esempio di ciò che restituisce la query:

id   amount   price 
    2   3    89 
    2   3    19 

    SELECT id, SUM(p.price*p.amount) total FROM purchases p GROUP by p.id 

==> [id => 2, total => 183] 
+3

Che cosa sta realmente facendo? Cosa vuoi che faccia? Sono le due cose vitali che ogni domanda dovrebbe avere. La frase "non funziona bene" non è un buon rapporto problema. – paxdiablo

+0

Ho dato un esempio, leggi l'esempio. – Gal

+0

Cosa * fa * restituisce? Quali sono i tuoi dati esatti? – jensgram

risposta

14
SELECT 
id, 
SUM(amount*price) AS total 
FROM mytable 
GROUP BY id 

dati:

| id | amount | price | 
|----|--------|-------| 
| 2 | 3  | 19 | 
| 2 | 3  | 89 | 
| 3 | 203 | 1  | 

Risultato:

id total 
2 324 
3 203 
+0

Questo è esattamente quello che ho detto non funzionava per me. Copia e incolla non ha ancora risolto. – Gal

+0

non è diverso dalla query che ha scritto. Come lo avrebbe aiutato? – RJD22

+0

Beh, funziona almeno sul mio server di test MySQL e fornisce esattamente ciò che ci si aspetta. –

0

@sombe: Ho appena testato la query e funziona bene. Sei sicuro che il tuo mysql sia aggiornato?

alt text

Il secondo funziona bene anche:

alt text

+0

Sì (5). Pensavo che anche la query fosse soddisfacente, ma per esempio per 3 * 89 + 3 * 19 restituisce 183 (non ho idea di come sia arrivato lì). – Gal

+0

potresti darci i dati che creano l'errore? – RJD22

+0

Ho modificato la domanda. – Gal

Problemi correlati