2010-03-04 57 views
12

Tengo una tabla como la siguiente:¿Cómo aplicar una operación SUM sin agrupar los resultados en SQL?

+----+---------+----------+ 
| id | group | value | 
+----+---------+----------+ 
| 1 | GROUP A | 0.641028 | 
| 2 | GROUP B | 0.946927 | 
| 3 | GROUP A | 0.811552 | 
| 4 | GROUP C | 0.216978 | 
| 5 | GROUP A | 0.650232 | 
+----+---------+----------+ 

Si realizo la siguiente consulta:

SELECT `id`, SUM(`value`) AS `sum` FROM `test` GROUP BY `group`; 

que, obviamente, se obtiene:

+----+-------------------+ 
| id | sum    | 
+----+-------------------+ 
| 1 | 2.10281205177307 | 
| 2 | 0.946927309036255 | 
| 4 | 0.216977506875992 | 
+----+-------------------+ 

pero necesito una tabla como este:

+----+-------------------+ 
| id | sum    | 
+----+-------------------+ 
| 1 | 2.10281205177307 | 
| 2 | 0.946927309036255 | 
| 3 | 2.10281205177307 | 
| 4 | 0.216977506875992 | 
| 5 | 2.10281205177307 | 
+----+-------------------+ 

Donde las filas sumadas se repiten explícitamente.

¿Hay alguna forma de obtener este resultado sin utilizar consultas múltiples (anidadas)?

+0

unirse a sus resultados de la consulta de nuevo sobre la mesa usando 'agrupación: –

+0

Usted está haciendo varias cosas, por lo que varias consultas (anidados) se requieren – John

+4

Cambio' GROUP BY agrupación: a ' GROUP BY id' - ¿Eso devuelve los resultados esperados? –

Respuesta

9

Dependería de su servidor SQL, en Postgres/Oracle usaría las funciones de la ventana. En MySQL ... no es posible afaik.

Tal vez usted puede fingir como esto:

SELECT a.id, SUM(b.value) AS `sum` 
FROM test AS a 
JOIN test AS b ON a.`group` = b.`group` 
GROUP BY a.id, b.`group`; 
+0

+1 este es sintácticamente correcto y da la respuesta correcta. –

+0

GROUP BY a.id es suficiente, no necesita agrupar por a.id y b.group; – a1ex07

1

No, no hay que yo sepa. Usted tendrá que utilizar una combinación como

SELECT t.`id`, tsum.sum AS `sum` 
FROM `test` as t GROUP BY `group` 
JOIN (SELECT `id`, SUM(`value`) AS `sum` FROM `test` GROUP BY `group`) AS tsum 
    ON tsum.id = t.id 
+0

ERROR 1064 (42000): Tiene un error en su sintaxis SQL; revise el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta para usar cerca de 'JOIN (SELECCIONAR' id', SUM ('valor') AS' SUM' FROM 'test' GROUP BY' grupo') AS tsum 'en línea 3 –

Cuestiones relacionadas