![]() |
Sintaxis con count
¡Hola a todos!
Tengo una duda, tengo la siguiente consulta:
Estoy buscando pacientes con estatus de la cita = I, pero lo que quiero hacer es que solo me muestre los niños que en la columna "cuenta" tengan 1 inasistencia y no se como hacerlo, porque lo intente asi:
Pero me dice que no encuentra la columna cuenta. :confused: ¿Como lo puedo hacer? Gracias de antemano por su ayuda. |
Hola
Y no es asi: Saludos |
|
Yo voto por esta:
Bye |
Pues yo me quedo con la simpleza de caral y contra:
Saludos, |
No sé si en algunos motores sea válido, pero hasta donde sé, no puede usarse count con un campo si ese campo no está en la cláusula group by. Por otra parte, las condiciones sobre campos agregados, en principio se hacen con having y no con where.
Bye |
Hola
Cita:
Saludos |
No es que no pueda usarse where junto con having; en el ejemplo que puse, están ambos. Pero el resultado de una función agregada como count, no puede saberse sino hasta que se han seleccionado todos los registros que satisfagan la cláusula where; por ello, es que existe having, para poder poner condiciones sobre los resultados del agrupamiento.
Bye |
Hola
No te enojes con este novato, pero no hace falta poner el having si ya pusiste el where, no hace falta repetir lo mismo, o casi, en la sentencia where se puede completar todo. Que lo he hecho así que lo digo con convicción.:D:D Saludos |
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 |
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.:D Saludos |
Pues no sé qué decir. Acabo de probar con Access y me manda este error:
Cita:
Bye |
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.
Esta sentencia es totalmente válida en MySQL. "Count(*) Devuelve un contador de las filas recuperadas". |
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 |
La sentencia en SQL estándar que devuelve esta información es:
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 ;) |
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.:o
Saludos, |
Cita:
Bye |
Cita:
Lo siento, pasé por alto tu respuesta... exactamente eso keyboy. |
La franja horaria es GMT +2. Ahora son las 03:54:58. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi