PDA

Ver la Versión Completa : Problemas con GROUP BY en firebird


verm83
09-04-2004, 18:01:15
Hola buenas.
Resulta que estoy haciendo una aplicación para gestionar un videoclub, y me interesaría que me hiciera un ranking con los juegos más alquilados. Para ello uso la siguiente consulta, la cual me da un fallo sobre la cláusula GROUP BY:

SELECT
JUEGOS.NOMBRE,JUEGOS.PLATAFORMA,SUM(JUEGOS.NOMBRE) AS SUMA
FROM
ALQUILER INNER JOIN JUEGOS ON (ALQUILER.ID_JUEGO = JUEGOS.ID_JUEGO)
GROUP BY
JUEGOS.NOMBRE ORDER BY JUEGOS.NOMBRE DESC

El fallo devuelto es el siguiente: "invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)"

No he conseguido solucionarlo, máxime cuando mi gestor de base de datos me dice que es correcta, y la he usado muchas otras veces con Oracle o MySQL. Igualmente, he intentado hacer un LIMIT 3, pero también me devuelve error, teniendo que controlar los resultados por código desde Delphi. Uso Delphi 7 + Firebird + FIBPlus. ¿Alguna sugerencia?

Gracias anticipadas.

__cadetill
09-04-2004, 19:27:32
si tu dices que la misma consulta te ha funcionado en otros SGBD... te creo, pero toda cláusula GROUP BY ha de contener los mismos campos que la SELECT a excepción de los agregados


SELECT
JUEGOS.NOMBRE,JUEGOS.PLATAFORMA,SUM(JUEGOS.NOMBRE) AS SUMA
FROM
ALQUILER INNER JOIN JUEGOS ON (ALQUILER.ID_JUEGO = JUEGOS.ID_JUEGO)
GROUP BY
JUEGOS.NOMBRE, JUEGOS.PLATAFORMA
ORDER BY JUEGOS.NOMBRE DESC

jachguate
13-04-2004, 08:18:35
máxime cuando mi gestor de base de datos me dice que es correcta, y la he usado muchas otras veces con Oracle o MySQL.

Con mySQL no se..... pero con Oracle, no te lo creo :confused:
que versión de Oracle usas???

:rolleyes:

Hasta luego.

;)

verm83
13-04-2004, 12:20:30
Pues esa consulta concreta no lo sé, me refería al GROUP BY. No sabía que tenía que llevar los mismos campos que usas en el SELECT. Igualmente, yo he usado muchas veces un SELECT con muchos campos, y en el GROUP BY sólo el que me interesa, bajo MySQL, y funciona perfectamente. Juraría, a que con Oracle también. He usado la 8i Developer, aunque no en profundidad.

guillotmarc
13-04-2004, 14:15:11
Hola.

he usado muchas veces un SELECT con muchos campos, y en el GROUP BY sólo el que me interesa, bajo MySQL, y funciona perfectamente.
Entonces te queda una consulta sin el menor sentido. Si MySQL la acepta, es un bug de MySQL.

Saludos.

jachguate
13-04-2004, 21:50:51
Juraría, a que con Oracle también. He usado la 8i Developer

No jures en vano... te vas a ir al infierno! :D

Pues no, yo se asegurarte que en Oracle también tenes que listar todos los campos en el group by. A diferencia de interbase, podes usar funciones, cálculos, etc. e incluirlos en el group by... salvo las funciones agregadas o estadísticas, por supuesto.

Por cierto, yo no conozco la 8i developer (que estoy seguro que no varia en su comportamiento... ) pero esto que afirmo si lo tengo bien probado en la 7.3.x (personal y enterprise), en la 8i (personal y enterprise) y en la 9i enterprise....

Hasta luego.

;)

guillotmarc
13-04-2004, 22:01:20
Hola.

A diferencia de interbase, podes usar funciones, cálculos, etc. e incluirlos en el group by... salvo las funciones agregadas o estadísticas, por supuesto.
Ahora en Firebird 1.5 también puedes agrupar por expresiones (funciones, cálculos, ...).

Saludos.

verm83
15-04-2004, 11:31:26
Jo, pues si que me estoy enterando de cosas !!
Y yo que pensaba que sabía un poquito de SQL... :eek: