Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Consulta Con Order By (https://www.clubdelphi.com/foros/showthread.php?t=13700)

VRO 27-08-2004 16:35:34

Consulta Con Order By
 
HOLA, ¿QUE TAL?,

EL PROGRAMA QUE REALIZO CONSTA DE 2 TABLAS QUE INTERVIENEN EN LA CONSULTA PROBLEMA Y QUE SON: LECTURAS Y CONTADORES, LO QUE YO PRETENDO CONSEGUIR ES SACAR EL CONTADOR QUE TIENE MAYOR NUMERO DE LECTURAS, PARA LO CUAL HAGO LO SIGUIENTE:

QUERY.CLOSE;
QUERY.SQL.TEXT:='select count(*)as num,contadores.numero from contadores,lecturas where contadores.depende='+cont+' and contadores.numero=lecturas.numero and patron=0 order by num desc';
QUERY.OPEN;

EL ERROR QUE DA ES: INVALID COLUMN REFERENCE NUM, LO QUE QUIERE DECIR QUE UN RENOMBRAMIENTO NO SE PUEDE UTILIZAR EN EL ORDER BY, PERO TAMPOCO PUEDO UTILIZAR EL COUNT(*).

¿SI ALGUIEN ME PUEDE AYUDAR Ó DECIR COMO PODER HACERLA?, YA QUE ESTA FORMA ES CORRECTA EN MYSQL PERO NO EN SQL QUE ES LO QUE UTILIZA INTERBASE.

MUCHAS GRACIAS.

guillotmarc 27-08-2004 18:37:20

Hola.

Lo primero, aconsejarte de que en el futuro no escribas en mayúsculas, está mal visto. Se asocia con el hecho de gritar y se considera de muy mala educación.

Respecto a la consulta, me extraña que funcione en MySQL, aunque seguro que no va a funcionar en ningún Servidor SQL serio : Oracle, SQL Server, DB2, ...

El estándar SQL indica que si se utilizan funciones de agregado (count es una), cualquier campo referido en la consulta, tiene que estar o bien dentro de una función de agregado, o en la agrupación utilizada.

Así pués, para que funcione esa consulta debes especificar una agrupación, para el campo que no está en la función de agregado.

Es decir :

select count(*) as num, numero
from contadores
where .......
group by numero
oder by 1 desc

Nota : He puesto una referencia ordinal en el order by (indicando que ordene por el primer campo de la consulta), en lugar de utilizar su nombre, debido a que no estoy seguro de que te acepte un alias.

Saludos.

roman 27-08-2004 19:19:16

Cita:

Empezado por guillotmarc
me extraña que funcione en MySQL, aunque seguro que no va a funcionar en ningún Servidor SQL serio : Oracle, SQL Server, DB2, ...

El estándar SQL indica que si se utilizan funciones de agregado (count es una), cualquier campo referido en la consulta, tiene que estar o bien dentro de una función de agregado, o en la agrupación utilizada.

Ciertamente se trata de una extensión de MySql al SQL estándard pero, ¡la bd que esté libre de extensiones que lance la primera piedra! :D.

Por otra parte, el hecho de que MySql no cumpla (aún) completamente con el estandard SQL no es sinónimo de falta de seriedad, ¿o sí?

// Saludos

guillotmarc 27-08-2004 22:04:18

Otra sugerencia :

No hagas la misma pregunta en distintos Foros. Solo consigues hacer perder el tiempo a la gente. Horas después de haberte respondido yo, un compañero, ignorando el hecho, te ha respondido practicamente lo mismo en el otro hilo. Es extremadamente molesto, ha perdido inutilmente su tiempo, llevado al extremo puede provocar que algunos usuarios molestos no te ayuden más. Por ello te remito a la lectura de la guía de estilo de los Foros, siguiendo sus sugerencias seguro que obtendrás una experiencia mucho más positiva de los Foros.

NOTA: Voy a cerrar este hilo, si quieres seguir discutiendo el problema puedes hacerlo en el otro.

Saludos.


La franja horaria es GMT +2. Ahora son las 01:48:31.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi