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

alguien me da una idea?

Estas en el tema de alguien me da una idea? en el foro de PostgreSQL en Foros del Web. Tengo una serie de registros ejm Nombre Cantidad Pepe 10 Pepe 5 Pepe 6 Pepe 8 Juan 15 Pepe 6 Juan 9 y quiero como ...
  #1 (permalink)  
Antiguo 01/02/2010, 04:42
 
Fecha de Ingreso: mayo-2008
Mensajes: 38
Antigüedad: 16 años, 5 meses
Puntos: 0
alguien me da una idea?

Tengo una serie de registros ejm
Nombre Cantidad
Pepe 10
Pepe 5
Pepe 6
Pepe 8
Juan 15
Pepe 6
Juan 9
y quiero como resultado
Nombre Cantidad
Pepe 35 (es la suma)
Pepe 0
Pepe 0
Pepe 0
Pepe 0
Juan 25
Pepe 0
Juan 0

es decir ponerle a uno de los registros la suma de todos los iguales y al resto de iguales 0
puedo encontra con group by la suma pero luego no se como asignar a uno la suma y al resto 0 sin tener que recorrer la tabla que es lo que me hace lenta la aplicación
Gracias
  #2 (permalink)  
Antiguo 01/02/2010, 10:56
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: alguien me da una idea?

Lo mas parecido que puedes obtener:
Código SQL:
Ver original
  1. pruebas=> SELECT nombre,SUM(cantidad) FROM tabla GROUP BY nombre
  2. >UNION ALL
  3. >SELECT nombre,'0' FROM miggim;
  4.  
  5.  nombre | SUM
  6. --------+-----
  7.  pepe   |  35
  8.  juan   |  24
  9.  pepe   |   0
  10.  pepe   |   0
  11.  pepe   |   0
  12.  pepe   |   0
  13.  juan   |   0
  14.  pepe   |   0
  15.  juan   |   0
  16. (9 filas)

El problema es que te repite dos registros de mas con el 0.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 01/02/2010, 15:39
 
Fecha de Ingreso: mayo-2008
Mensajes: 38
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: alguien me da una idea?

Cita:
Iniciado por huesos52 Ver Mensaje
Lo mas parecido que puedes obtener:
Código SQL:
Ver original
  1. pruebas=> SELECT nombre,SUM(cantidad) FROM tabla GROUP BY nombre
  2. >UNION ALL
  3. >SELECT nombre,'0' FROM miggim;
  4.  
  5.  nombre | SUM
  6. --------+-----
  7.  pepe   |  35
  8.  juan   |  24
  9.  pepe   |   0
  10.  pepe   |   0
  11.  pepe   |   0
  12.  pepe   |   0
  13.  juan   |   0
  14.  pepe   |   0
  15.  juan   |   0
  16. (9 filas)

Aunque todavía no lo he probado, ¿me podrias explicar que hace por un lado el Union all y por otro la linea select nombre, '0' from miggim, entiendo seria select nombre, '0' from tabla. Gracias

El problema es que te repite dos registros de mas con el 0.

saludos
  #4 (permalink)  
Antiguo 01/02/2010, 15:50
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: alguien me da una idea?

Te sirvió?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 01/02/2010, 15:54
 
Fecha de Ingreso: mayo-2008
Mensajes: 38
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: alguien me da una idea?

ya lo entendí, y ya veo que sale una linea más por cada grupo de registros que agrupo teniendo en cuenta que manejo del orden de 500 registros diarios esto es un problema que igualmente tendria que solucionar, pero bueno es otro reto más, salvo que a alguien se le ocurra otra idea. GRACIAS IGUALMENTE
  #6 (permalink)  
Antiguo 01/02/2010, 16:16
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: alguien me da una idea?

Hacer lo que quieres hacer me parece un requerimiento bien extraño.
Pero si nos cuentas lo que tratas de hacer y el por que lo necesitas así, tal vez te podamos dar un consejo de como afrontar el problema.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 01/02/2010, 16:32
 
Fecha de Ingreso: mayo-2008
Mensajes: 38
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: alguien me da una idea?

básicamente es lo que he escrito, mirando con lo que me habeis dicho se me ocurre que igualmente puedo usar la clave principal para darle el valor de la suma(cantidad) al registro con la clave más pequeña, seria min(indice), y al resto del grupo ponerlo a 0.

la tabla puedo convertirla en algo así
Indice Nombre Cantidad
1 Pepe 10
2 Pepe 15
3 Juan 5
4 Pepe 6
5 Luis 12
7 Juan 6
8 Pepe 3

y busco algo así

Indice Nombre Cantidad
1 Pepe 34
2 Pepe 0
3 Juan 11
4 Pepe 0
5 Luis 12
7 Juan 0
8 Pepe 0

GRACIAS A TODOS
  #8 (permalink)  
Antiguo 01/02/2010, 22:37
 
Fecha de Ingreso: mayo-2008
Mensajes: 38
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: alguien me da una idea?

Cita:
Iniciado por miggim Ver Mensaje
básicamente es lo que he escrito, mirando con lo que me habeis dicho se me ocurre que igualmente puedo usar la clave principal para darle el valor de la suma(cantidad) al registro con la clave más pequeña, seria min(indice), y al resto del grupo ponerlo a 0.

la tabla puedo convertirla en algo así
Indice Nombre Cantidad
1 Pepe 10
2 Pepe 15
3 Juan 5
4 Pepe 6
5 Luis 12
7 Juan 6
8 Pepe 3

y busco algo así

Indice Nombre Cantidad
1 Pepe 34
2 Pepe 0
3 Juan 11
4 Pepe 0
5 Luis 12
7 Juan 0
8 Pepe 0

GRACIAS A TODOS
Lo siento sigo pensando en lo mio ¿estaria bien algo así?
UPDATE From Tabla Set Cantidad = SELECT Sum (cantidad) from Tabla Group by Nombre Where Indice = Min(Select Indice from tabla group by Nombre)
seguro que es una burrada que todavía no puedo probar pero bueno por ahi pienso yo podrian ir los tiros

Etiquetas: idea
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 02:12.