Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-01-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 22
keyboy Va por buen camino
No sé. Quizá algunos motores lo permitan. Yo acabo de probar con MySQL y no se puede. El punto es el timing. where y having no ocurren al mismo tiempo. El motor, primero hace la selección de registros de acuerdo a lo que contenga el where y luego agrupa los registros. No puede saber cuántos hay de cada elemento del grupo, si todavía no hace el agrupamiento. Una vez hecho el agrupamiento, el where ya pasó, ya no es su tiempo. Por eso viene el having.

Quizá algunos motores puedan discernir que un count colocado en el where debe "apartarse" y aplicarse luego del agrupamiento, pero no creo que sea el estándar.

Bye
Responder Con Cita
  #2  
Antiguo 30-01-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 27
Caral Va por buen camino
Hola
Bueno, en la discusión sana que tenemos, ademas de que estoy aprendiendo un montón, te puedo decir que en Access y Firebird que son los que tengo a mano, funciona.
No he probado MySql, no lo tengo instalado, pero creo en tu palabra, así que ni lo instalo.
Saludos
Responder Con Cita
  #3  
Antiguo 30-01-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 22
keyboy Va por buen camino
Pues no sé qué decir. Acabo de probar con Access y me manda este error:

Cita:
No puede haber una función de agregado en la cláusula WHERE


Bye
Responder Con Cita
  #4  
Antiguo 30-01-2008
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 23
AzidRain Va camino a la fama
MySQL si permite hacer el count sin indicar ningun group lo cual es muy válido dado que muchas veces (como esta) no necesitamos agrupar. El BDE no permite esto y obliga a poner el group con todos los campos.
Código SQL [-]
select cita_pacienteid, count(*) as cuenta
from cita
where cita_status = 'I' and count(*) < 2


Esta sentencia es totalmente válida en MySQL. "Count(*) Devuelve un contador de las filas recuperadas".
__________________
AKA "El animalito" ||Cordobés a mucha honra||

Última edición por AzidRain fecha: 30-01-2008 a las 21:51:43.
Responder Con Cita
  #5  
Antiguo 30-01-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 22
keyboy Va por buen camino
Eso es cierto, puede usarse un función agregada sin group by en los casos en los que realmente no se necesita agrupar. Pero, a mi entender, este caso sí requiere agrupación: se tiene una lista de pacientes, cada uno puede tener varias inasistencias. Entonces agrupa por paciente para saber cuántas inasistencias tiene cada uno.

Bye
Responder Con Cita
  #6  
Antiguo 30-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 30
jachguate Va por buen camino
La sentencia en SQL estándar que devuelve esta información es:

Código SQL [-]
select cita_pacienteid, count(cita_pacienteid)
  from cita
 where cita_status = 'I'
 group by cita_pacienteid
having count(cita_pacienteid) = 1

Puede que motores como mysql o access acepten otras sintaxis... ya ves que los dialectos SQL de estos motores son bastante torcidos. Pero una sentencia como la mostrada, correrá prácticamente en cualquier motor decente.

Hasta luego

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #7  
Antiguo 31-01-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
Delphius Va camino a la fama
Gracias por aclarar la situación. Es cierto, para el count es necesario el agrupamiento. No se en que tenía la cabeza en ese momento.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #8  
Antiguo 31-01-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 22
keyboy Va por buen camino
Cita:
Empezado por jachguate Ver Mensaje
La sentencia en SQL estándar que devuelve esta información es:

Código SQL [-]
select cita_pacienteid, count(cita_pacienteid)
  from cita
 where cita_status = 'I'
 group by cita_pacienteid
having count(cita_pacienteid) = 1
¿No es lo que yo decía?

Bye
Responder Con Cita
  #9  
Antiguo 31-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 30
jachguate Va por buen camino
Cita:
Empezado por keyboy Ver Mensaje
¿No es lo que yo decía?

Bye
jo jo jo... claro que si!!

Lo siento, pasé por alto tu respuesta... exactamente eso keyboy.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
SQL y clausula Count karlaoax SQL 14 17-09-2007 19:35:55
RecordCount Vs Count (SQL) vtdeleon Conexión con bases de datos 8 10-10-2005 08:10:28
varios count pepe2000 SQL 7 16-02-2005 18:16:51
sentencia count()..... hook SQL 8 04-05-2004 14:53:04
Resultado de Count en SQL MRang14 SQL 2 05-03-2004 19:42:47


La franja horaria es GMT +2. Ahora son las 04:34:34.


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