2012-09-07 103 views
6

Estoy tratando de crear una consulta de selección de MySQL que calcule un valor basado en otros dos campos.MySQL seleccionar y calcular el valor de varias columnas

Esta es mi consulta,

SELECT request_id, (
unit_cost * quantity 
) AS claim_value 
FROM `xx_non_part_usage` 
WHERE request_id = request_id 
GROUP BY request_id 

La consulta anterior sólo se trae de nuevo el total_value para una de las filas.

Por ejemplo - es aquí algunos datos de ejemplo,

ID  REQUEST_ID  QUANTITY  UNIT_VALUE 
1  10001   2.0    3.00 
2  10001   1.0    19.00 
3  10003   0.5    18.00 
4  10001   10.0   12.00 
5  10003   0.75   6.76 
6  10002   9.0    3.20 
7  10001   0.10   13.80 
8  10001   1.0    90.99 
9  10004   6.75   3.00 
10  10009   3.23   87.00 

Como se puede ver hay varias filas de REQUEST_ID '10001'. Lo que la consulta necesita hacer es REQUEST_ID * CANTIDAD y luego agruparlos para que solo devuelva el valor final (agregando todos los resultados de la suma multiplicada (REQUEST_ID * CANTIDAD).

Aquí hay un resultado esperado de lo que soy la esperanza de obtener (ejemplo diferente en REQUEST_ID 10003,

REQUEST_ID  TOTAL_VALUE 
10003   14.07 
10004   20.75 
... 
... 

gracias de antemano.

+0

Al eliminar el 'DONDE' se obtienen los mismos resultados. – verheesj

+0

puede usar sqlfiddle? – jcho360

+0

@verheesj: debe marcar una respuesta como aceptada si contestó su pregunta. – UltraOne

Respuesta

11

¿por qué se utiliza "where"?

mysql> select * from test; 
+------------+------------+----------+ 
| request_id | unit_value | quantity | 
+------------+------------+----------+ 
|   1 |   3 |  2 | 
|   1 |   19 |  1 | 
|   2 |  6.76 |  0.75 | 
|   2 |   18 |  0.5 | 
+------------+------------+----------+ 
4 rows in set (0.00 sec) 

mysql> SELECT request_id, sum(unit_value * quantity) as x from test group by request_id; 
+------------+--------------------+ 
| request_id | x     | 
+------------+--------------------+ 
|   1 |     25 | 
|   2 | 14.070000171661377 | 
+------------+--------------------+ 
2 rows in set (0.00 sec) 
+0

Elimino el WHERE y agregué SUM. Esto funcionó perfectamente. ¡Gracias por la ayuda! Muy apreciado – verheesj

2
ID  REQUEST_ID  CLAIM_VALUE 
3  10003   9.00 
5  10003   5.07

que desea utilizar SUM

SELECT 
    request_id, 
    SUM(unit_cost * quantity) AS claim_value 
FROM `xx_non_part_usage` 
WHERE request_id = request_id 
GROUP BY request_id 

No se debe utilizar GROUP BY menos que esté utilizando una función agregada.

+0

Gracias por su respuesta, lo he arreglado ahora :) – verheesj

Cuestiones relacionadas