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

El group by no me funciona

Estas en el tema de El group by no me funciona en el foro de PostgreSQL en Foros del Web. Hola necesito una ayuda con una consulta que posee condicionantes en el select; mi consulta es la siguiente: SELECT distinct a.nombre_instit,(case when c.aprobado=1 then count(c.*) ...
  #1 (permalink)  
Antiguo 26/03/2009, 14:39
 
Fecha de Ingreso: junio-2006
Mensajes: 3
Antigüedad: 18 años, 5 meses
Puntos: 0
El group by no me funciona

Hola necesito una ayuda con una consulta que posee condicionantes en el select; mi consulta es la siguiente:

SELECT distinct a.nombre_instit,(case when c.aprobado=1 then count(c.*) else 0 END) as aprobado, (case when c.reprobado=1 then count(c.*) else 0 END) as reprobado,
(case when c.retirado=1 then count(c.*) else 0 END) as retirado, (case when c.lenguaje=1 then count(c.*) else 0 END) as lenguaje
FROM institucion a INNER JOIN proyecto_grupo b ON a.rdb=b.rdb INNER JOIN alumno_proyecto c ON (a.rdb
=c.rdb AND c.rdb=b.rdb) WHERE b.rdb in (SELECT rdb FROM corp_instit WHERE num_corp=2) AND b.tipo=1 GROUP BY a.nombre_instit, c.aprobado, c.reprobado,
c.retirado,c.lenguaje

El problema radica en que por cada case me obliga a generar una agrupacion, con lo cual me crear un nuevo registro como resultado

Gracias
  #2 (permalink)  
Antiguo 26/03/2009, 21:20
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: El group by no me funciona

Un saludo Fido Dido

Pero cual es el problema? si le estas diciendo que cuente los registros para cada evento en cada campo. Al momento de agrupar, le estas diciendo que te cuente los aprobados, reprobados, retirados y lenguaje. Necesitas en la salida 4 salidas diferentes.

Cual es tu salida a la consulta? y que salida esperas?

Un saludo
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 27/03/2009, 08:31
 
Fecha de Ingreso: junio-2006
Mensajes: 3
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: El group by no me funciona

Hola Huesos52

El problema radica en que me saca 6 registro en la cual solo necesito uno, la cual contenga el nombre de la institucion, total aprobado, total reprobado, total retirado, total lenguaje. Y necesito que solo quede agrupo por el nombre de la institucion, pero por cada case me obliga a generar otra agrupacion, con que me genera otro registro.

Gracias
  #4 (permalink)  
Antiguo 27/03/2009, 09:30
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: El group by no me funciona

Fido Dido

Ya te entiendo. Esto pasa por que todos los campos que quieres mostrar, los tienes en la capa superior de la consulta. La forma de corregir esto, es generar tablas para cada conteo e indexarla a la consulta.

Para que me entiendas mejor te pongo un ejemplo:

Código sql:
Ver original
  1. pruebas=# CREATE TABLE prueba(id INTEGER, nombre text, puntos INTEGER);
  2. CREATE TABLE
  3. pruebas=# INSERT INTO prueba VALUES(1,'daniel',4);
  4. INSERT 0 1
  5. pruebas=# INSERT INTO prueba VALUES(2,'daniela',8);
  6. INSERT 0 1
  7. pruebas=# INSERT INTO prueba VALUES(3,'danielito',8);
  8. INSERT 0 1
  9. pruebas=# INSERT INTO prueba VALUES(4,'danielita',12);
  10. INSERT 0 1
  11.  
  12. //Este sería tu caso
  13. pruebas=# SELECT id, (CASE WHEN puntos=12 THEN COUNT(prueba.*) ELSE 0 END) AS conteo FROM prueba GROUP BY id, puntos;
  14.  id | conteo
  15. ----+--------
  16.   1 |      0
  17.   2 |      0
  18.   3 |      0
  19.   4 |      1
  20. (4 filas)
  21.  
  22. //Esta seria la solucion al problema.
  23. pruebas=# SELECT prueba.id, t1.conteo12 FROM prueba JOIN (SELECT id,COUNT(*) AS conteo12 FROM prueba WHERE puntos=12 GROUP BY id) AS t1 ON prueba.id = t1.id;
  24.  id | conteo12
  25. ----+---------
  26.   4 |       1
  27. (2 filas)

Tus tablas estan un poco confusas, ojala con esto te ubiques y logres tu salida.

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

Última edición por huesos52; 27/03/2009 a las 10:36
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 11:17.