2011-01-17 9 views
6

mam 3 kolumny w tabeli o nazwie „nabyciu”:Suma mnożenie kolumn do wierszy o podobnych identyfikatorach w MySQL

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

Chcę grupować wszystkie wiersze z podobnych identyfikatorów i mają tę tablicę w wyniku :

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

jak suma rachunków dla SUM (ilość * cena) dla wierszy o podobnych identyfikatorach.

Próbowałem za pomocą

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

ale to nie działa dobrze (to znaczy nie osiągnąć to, co chcę, co jest, co napisałem wyżej). Wszelkie pomysły, jak to zrobić w mysql?

Przykładem co zwraca zapytanie:

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

Co to właściwie robi? Co chcesz zrobić? Są to dwie istotne rzeczy, które powinno mieć każde pytanie. Wyrażenie "nie działa dobrze" nie jest dobrym raportem o problemie. – paxdiablo

+0

Podałem przykład, przeczytaj przykład. – Gal

+0

Co * zwraca *? Jakie są twoje dokładne dane? – jensgram

Odpowiedz

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

danych:

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

Wynik:

id total 
2 324 
3 203 
+0

To jest dokładnie to, co powiedziałem, że nie działa dla mnie. Kopiuj i wklej jeszcze go nie rozwiązał. – Gal

+0

to nie różni się od zapytania, które napisał. Jak to by mu pomogło? – RJD22

+0

Dobrze działa na moim serwerze testowym MySQL i daje dokładnie to, czego się spodziewasz. –

0

@sombe: Właśnie testowany zapytanie i działa dobrze. Czy jesteś pewien, że twój mysql jest aktualny?

alt text

Drugi działa zbyt dobrze:

alt text

+0

Tak (5). Myślałem, że zapytanie też było w porządku, ale na przykład dla 3 * 89 + 3 * 19 zwraca 183 (nie mam pojęcia jak się tam dostał). – Gal

+0

Czy możesz podać nam dane, które powodują błąd? – RJD22

+0

Edytowałem pytanie. – Gal