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

Group by Meses y Años

Estas en el tema de Group by Meses y Años en el foro de PostgreSQL en Foros del Web. Hola a todos, quiero realizar una consulta que me agrupe los resultados por meses y años. Estoy intentando realizara lo siguiente pero me falla SELECT ...
  #1 (permalink)  
Antiguo 29/11/2010, 17:39
 
Fecha de Ingreso: noviembre-2010
Mensajes: 7
Antigüedad: 13 años, 5 meses
Puntos: 1
Pregunta Group by Meses y Años

Hola a todos,
quiero realizar una consulta que me agrupe los resultados por meses y años.

Estoy intentando realizara lo siguiente pero me falla

SELECT to_char(Fecha, 'TMMon-yyyy') as fech
FROM ventas
Group by fech
order by to_char(fecha,'yyyy')


Intento agruptar unas filas por mes y año y que luego me lo ordene por año.
Pero me lanza este mensaje de error:
ERROR: la columna «ventas.fecha» debe aparecer en la cláusula GROUP BY o ser usada en una función de agregación

¿alguna idea de como hacerlo? gracias de antemano.
  #2 (permalink)  
Antiguo 29/11/2010, 21:04
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Group by Meses y Años

cuando haces group by es por que se requiere una función de agregación. Llamese COUNT, MAX, MIN,AVG, SUM etc.

si analizas la consulta... realmente que resultado esperarías?
Con respecto a que columna quieres agrupar?

eso es lo que dice el error

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 30/11/2010, 02:34
 
Fecha de Ingreso: noviembre-2010
Mensajes: 7
Antigüedad: 13 años, 5 meses
Puntos: 1
Pregunta Respuesta: Group by Meses y Años

Hola Huesos,
la consulta resumiendo sería esta.

SELECT to_char(Fecha,'TMMon-yyyy'), Sum(Venta)
FROM Ventas
WHERE Ventas.Fecha >= '01/01/1900' AND Ventas.Fecha <= '31/12/2100'
GROUP BY to_char(Fecha,'mmm-yyyy')
ORDER BY to_char(Ventas.Fecha,'yyyy-mm')


Pero me falta el error que indiqué en el post anterior.
  #4 (permalink)  
Antiguo 30/11/2010, 07:23
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Group by Meses y Años

Te sigue apareciendo el mismo error?

prueba así
Código SQL:
Ver original
  1. SELECT
  2. to_char(Fecha,'TMMon-yyyy') AS fech,
  3. SUM(Venta)
  4. FROM Ventas
  5. WHERE Ventas.Fecha BETWEEN '01/01/1900' AND '31/12/2100'
  6. GROUP BY fech
  7. ORDER BY to_char(Ventas.Fecha,'yyyy-mm')

No la he probado
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 30/11/2010, 10:32
 
Fecha de Ingreso: noviembre-2010
Mensajes: 7
Antigüedad: 13 años, 5 meses
Puntos: 1
De acuerdo Respuesta: Group by Meses y Años

Hola Huesos,
antes de nada, gracias por el esfuerzo de responder tantas preguntas, es de agradecer.

Finalmente lo solucioné así:

Código SQL:
Ver original
  1. SELECT Fech,TotalVenta
  2. FROM
  3. (
  4. SELECT to_char(Fecha,'TMMon-yyyy') AS Fech,to_char(Fecha,'yyyy-mm') AS AnioMes,SUM(Venta) AS TotalVenta
  5. FROM Ventas
  6. WHERE Ventas.Fecha BETWEEN '01/01/1900' AND '31/12/2100'
  7. GROUP BY Fech
  8. ORDER BY AnioMes
  9. ) AS X

Probando tu solucion me sigue saliendo el error:
ERROR: la columna «ventas.fecha» debe aparecer en la cláusula GROUP BY o ser usada en una función de agregación.

Lo gracioso es que si a la hora de ordenar pones el mismo formato que estas obteniendo en el select funciona.

Código SQL:
Ver original
  1. SELECT
  2.       to_char(Fecha,'TMMon-yyyy') AS fech,
  3.       SUM(Venta)
  4.       FROM Ventas
  5.       WHERE Ventas.Fecha BETWEEN '01/01/1900' AND '31/12/2100'
  6.       GROUP BY fech
  7.       ORDER BY to_char(Ventas.Fecha,'TMMon-yyyy')

Pero no es lo que quiero.
Así que al final opte por la select anidada.

Un saludo, hasta otra y gracias nuevamente.

Etiquetas: group, meses
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:08.