2011-01-17 4 views
6

tengo 3 columnas en una tabla llamada "compra":Suma de multiplicación de las columnas de las filas con identificaciones similares en MySQL

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

Quiero grupo de todas las filas con identificaciones similares y tienen esta matriz como consecuencia :

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

como cuentas totales para SUM (cantidad * precio) para las filas con identificaciones similares.

He intentado usar

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

pero no funciona bien (es decir, no consigue lo que quiero, que es lo que escribí más arriba). ¿Alguna idea sobre cómo hacer esto en mysql?

Un ejemplo de lo que devuelve la consulta:

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

Lo que está haciendo en realidad? ¿Qué quiere que haga? Son las dos cosas vitales que deberían tener todas las preguntas. La frase "no funciona bien" no es un buen informe de problemas. – paxdiablo

+0

He dado un ejemplo, lea el ejemplo. – Gal

+0

¿Qué * devuelve *? ¿Cuáles son sus datos exactos? – jensgram

Respuesta

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

datos:

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

Resultado:

id total 
2 324 
3 203 
+0

Eso es exactamente lo que dije que no funcionaba para mí. Copiar y pegar aún no lo ha resuelto. – Gal

+0

esto no es diferente de la consulta que escribió. ¿Cómo lo ayudaría esto? – RJD22

+0

Bueno, funciona en mi servidor de prueba MySQL al menos y ofrece exactamente lo que espera. –

0

@sombe: acabo de probar la consulta Y funciona bien. ¿Estás seguro de que tu mysql está actualizado?

alt text

el segundo trabaja muy bien también:

alt text

+0

Sí (5). Pensé que la consulta también estaba bien, pero por ejemplo para 3 * 89 + 3 * 19 devuelve 183 (no tengo idea de cómo llegó allí). – Gal

+0

¿podría darnos los datos que crean el error? – RJD22

+0

Edité la pregunta. – Gal

Cuestiones relacionadas