Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Sum +Group + Min

Estas en el tema de Sum +Group + Min en el foro de PostgreSQL en Foros del Web. Es replantear el tema por si alguien tiene alguna idea y realmente me haria un gran favor Tengo una Tabla Indice Nombre Cantidad 1 Pepe ...
  #1 (permalink)  
Antiguo 02/02/2010, 08:05
 
Fecha de Ingreso: mayo-2008
Mensajes: 38
Antigüedad: 16 años, 5 meses
Puntos: 0
Sum +Group + Min

Es replantear el tema por si alguien tiene alguna idea y realmente me haria un gran favor
Tengo una Tabla
Indice Nombre Cantidad
1 Pepe 3
2 Pepe 10
3 Juan 6
4 Pepe 1
5 Luis 12
6 Juan 3
etc. y busco
Indice Nombre Cantidad
1 Pepe 14
2 Pepe 0
3 Juan 9
4 Pepe 0
5 Luis 12
6 Juan 0

se le asigna al de menor indice la suma del grupo de iguales y al resto del grupo 0
¿alguien sabria como hacerlo con sql? GRACIAS
  #2 (permalink)  
Antiguo 02/02/2010, 08:35
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Sum +Group + Min

miggim lo he conseguido.... pero creo que es una consulta muy poco optima. No la he probado en un gran numero de registros, ya es cuestión si te sirve o no.

Código SQL:
Ver original
  1. SELECT t1.cod,t1.nombre,t2.suma FROM (SELECT nombre,MIN(cod) AS cod FROM tabla GROUP BY
  2. nombre)AS t1 INNER JOIN (SELECT nombre,MIN(cod) AS cod,SUM(cantidad)AS suma FROM tabla
  3. GROUP BY nombre) AS t2 ON t1.cod=t2.cod
  4. UNION
  5. SELECT cod,nombre,'0' FROM tabla
  6. WHERE cod
  7. NOT IN(
  8. SELECT t1.cod FROM (SELECT nombre,MIN(cod) AS cod FROM tabla GROUP BY
  9. nombre)AS t1 INNER JOIN (SELECT nombre,MIN(cod) AS cod,SUM(cantidad)AS suma FROM tabla
  10. GROUP BY nombre) AS t2 ON t1.cod=t2.cod
  11. );

Nos cuentas si la demora es muy critica.


La prueba
Código SQL:
Ver original
  1. pruebas=> SELECT t1.cod,t1.nombre,t2.suma FROM (SELECT nombre,MIN(cod) AS cod FROM miggim1 GROUP BY
  2. pruebas(> nombre)AS t1 INNER JOIN (SELECT nombre,MIN(cod) AS cod,SUM(cantidad)AS suma FROM miggim1
  3. pruebas(> GROUP BY nombre) AS t2 ON t1.cod=t2.cod
  4. pruebas-> UNION
  5. pruebas-> SELECT cod,nombre,'0' FROM miggim1
  6. pruebas-> WHERE cod
  7. pruebas-> NOT IN(
  8. pruebas(> SELECT t1.cod FROM (SELECT nombre,MIN(cod) AS cod FROM miggim1 GROUP BY
  9. pruebas(> nombre)AS t1 INNER JOIN (SELECT nombre,MIN(cod) AS cod,SUM(cantidad)AS suma FROM miggim1
  10. pruebas(> GROUP BY nombre) AS t2 ON t1.cod=t2.cod
  11. pruebas(> );
  12.  cod | nombre | suma
  13. -----+--------+------
  14.    1 | pepe   |   14
  15.    2 | pepe   |    0
  16.    3 | juan   |    9
  17.    4 | pepe   |    0
  18.    5 | luis   |   12
  19.    6 | juan   |    0
  20. (6 filas)

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: group, min, sum
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:27.