Foros del Web » Bases de Datos » PostgreSQL »

Consulta sobre funciones de agregación y Group By

Estas en el tema de Consulta sobre funciones de agregación y Group By en el foro de PostgreSQL en Foros del Web. Hola, hace un tiempo en la empresa tenemos un problema!... Si tenemos esta consulta: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original SELECT SUM ( campo1 ) ...
  #1 (permalink)  
Antiguo 18/03/2010, 14:51
ssh
 
Fecha de Ingreso: agosto-2009
Mensajes: 85
Antigüedad: 5 años
Puntos: 0
Consulta sobre funciones de agregación y Group By

Hola, hace un tiempo en la empresa tenemos un problema!... Si tenemos esta consulta:

Código SQL:
Ver original
  1. SELECT SUM(campo1), campo2, campo3 FROM tabla1 WHERE campo1 > 10;

Postgres arrojará este error:

column "campo2" must appear in the GROUP BY clause or be used in an aggregate function

Arroja este error pues debo agregar el o los campos que no se están usando con función de agregación (Funciones de agregación: SUM, COUNT, MAX, MIN, AVG) en la cláusula GROUP BY, entonces debería hacer esto:

Código SQL:
Ver original
  1. SELECT SUM(campo1), campo2, campo3 FROM tabla1 WHERE campo1 > 10 GROUP BY campo2;

Si pongo esto ahora me arroja este error:

column "campo3" must appear in the GROUP BY clause or be used in an aggregate function

Así que debo agregar campo3 en el GROUP BY también:

Código SQL:
Ver original
  1. SELECT SUM(campo1), campo2, campo3 FROM tabla1 WHERE campo1 > 10 GROUP BY campo2, campo3;

Sólo así me funciona la consulta, pero la verdad es que no quería agrupar por campo2 y menos por campo3, me entienden? El resultado varía según la cantidad de campos en el GROUP BY.

Existe alguna forma o método en postgres para no caer en este "cachito", la empresa ha gastado mucha plata en aspirinas para nosotros, no entienden que el verdadero problema es el bendito GRUOP BY!

Ayuda por favor.
Gracias
  #2 (permalink)  
Antiguo 18/03/2010, 19:30
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.765
Antigüedad: 5 años, 7 meses
Puntos: 327
Respuesta: Consulta sobre funciones de agregación y Group By

ssh a mi también me parece que esto no debería ser tan estricto. Pero lastimosamente asi es.

Mira esto
http://www.forosdelweb.com/f21/duda-con-group-698154/

Tuve la misma duda que vos, al ver que en mysql (Unico DBMS que conozco) esto no genera problemas.

saludos
__________________
El que no sabe lo que busca, no entiende lo que encuentra.
  #3 (permalink)  
Antiguo 19/03/2010, 10:10
ssh
 
Fecha de Ingreso: agosto-2009
Mensajes: 85
Antigüedad: 5 años
Puntos: 0
Respuesta: Consulta sobre funciones de agregación y Group By

Ufff... Leí todos los artículos que te recomendaron, finalmente concluí que MySQL, Access, Oracle y Postgres tienen el mismo problema, si es que lo podemos llamar problema, hasta el momento estoy pensando que no es lógicamente correcto hacer querys usando GROUP BY cuando desde ya antes sabemos que una columna tiene valores distintos... hablando de "distintos" aquí aparece algo interesante sobre DISTINCT para este problema:

http://www.postgresql.org/docs/curre...ERIES-DISTINCT

Habla del DISTINCT ON, pero no sé muy bien cómo aplicarlo a este problema.
Aquí esta la documentación de Group by por postgres:
http://www.postgresql.org/docs/curre...#QUERIES-GROUP

Deja muy pocas dudas con sus ejemplos, pero sigo con tus interrogantes, qué pasa si tengo 50 o 60 campos que no estén en una función, tengo que agregarlos en el GROUP BY también?

debe existir un método, no me parece correcto el funcionamiento de esto....
saludos
  #4 (permalink)  
Antiguo 19/03/2010, 10:13
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.765
Antigüedad: 5 años, 7 meses
Puntos: 327
Respuesta: Consulta sobre funciones de agregación y Group By

Cita:
Deja muy pocas dudas con sus ejemplos, pero sigo con tus interrogantes, qué pasa si tengo 50 o 60 campos que no estén en una función, tengo que agregarlos en el GROUP BY también?
Cuando se me presentan estos problemas, hago uso de subconsultas donde solo agrego los campos requeridos en el group by y luego los llamo desde la consulta principal.

El distinct on está interesante. No lo conocía. Gracias por el dato.
__________________
El que no sabe lo que busca, no entiende lo que encuentra.
  #5 (permalink)  
Antiguo 19/03/2010, 10:42
ssh
 
Fecha de Ingreso: agosto-2009
Mensajes: 85
Antigüedad: 5 años
Puntos: 0
Respuesta: Consulta sobre funciones de agregación y Group By

Cita:
Iniciado por huesos52 Ver Mensaje
hago uso de subconsultas donde solo agrego los campos requeridos en el group by y luego los llamo desde la consulta principal
Sería mucho pedir un ejemplo? también uso subconsultas, pero quiero ver si hay otra forma de hacer esto.

Gracias.
  #6 (permalink)  
Antiguo 19/03/2010, 12:21
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.765
Antigüedad: 5 años, 7 meses
Puntos: 327
Respuesta: Consulta sobre funciones de agregación y Group By

Pon los registros de prueba que utilizas para la tabla y miramos como lo acomodamos.
saludos
__________________
El que no sabe lo que busca, no entiende lo que encuentra.
  #7 (permalink)  
Antiguo 23/03/2010, 14:06
ssh
 
Fecha de Ingreso: agosto-2009
Mensajes: 85
Antigüedad: 5 años
Puntos: 0
Respuesta: Consulta sobre funciones de agregación y Group By

mmm.... Al final creo q la solución final será usar "Funciones", ya que postgres no tiene una forma de acomodar el GROUP BY en estos casos.

Eeeeeeeeeeeeeeeeeen fiiiiiiiin..... Gracias por la ayuda. ;)

________________

Efectivamente la solución a este problema es entre el PC y el asiento, ja, lamentablemente no es correcto hacer querys de la forma que yo quería, tenía que cambiar el método de preguntar, ahora utilizo funciones para esto y las posibilidades aumentan bastante que el limitado select que estaba intentando hacer.

a alguien puede servirle esto.
Gracias!

Última edición por ssh; 08/04/2010 a las 14:39

Etiquetas: funciones, group
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 18:17.
SEO by vBSEO 3.3.2