¿Cómo cuento entradas de MySQL con un criterio HAVING
-
04-10-2019 - |
Pregunta
Así que por lo general sólo se puede hacer
SELECT COUNT(field.id) FROM table WHERE field.id > 100
y COUNT (campo) devolverá el número de entradas que tiene el criterio de field.id> 100
Pero, ¿qué ocurre si lo cuentes entradas especificadas con el criterio que tengan este mismo
SELECT COUNT(field.id), field.id * 10 AS foo FROM table HAVING foo > 100
el código no funcionaría en este caso ....
¿Cómo hago para entradas de conteo cuyo criterio se especifican a través de la cláusula HAVING?
Gracias de antemano
Solución
Bueno, obras COUNT
antes HAVING
se aplica a la conjunto de resultados . Así que si usted necesita para contar su número -. Tienes que envolver su consulta con otro
SELECT COUNT(*) FROM (
SELECT field.id * 10 AS foo FROM table HAVING foo > 100
)
Otros consejos
No se puede ejecutar cualquiera de consulta como está - me dan un error de 1140 "por medio de un agregado sin una cláusula GROUP BY" (es decir: COUNT(field.id)
). Todo parece no relacionarse con el agregado en absoluto, sino la capacidad de hacer referencia a los alias de columna para la comparación ...
El medio más ampliamente soportados es:
SELECT field.id * 10 AS foo
FROM table
WHERE field.id * 10 > 100
MySQL hace apoyo referencia a un alias de columna en la cláusula GROUP BY
o HAVING
. No requiere el uso de acentos abiertos, pero he visto casos en que no funcionaría (palabras no reservados) hasta acentos abiertos estaban presentes:
SELECT field.id * 10 AS foo
FROM table
HAVING `foo` > 100
No recomiendo este enfoque - se admite en SQL Server, Oracle, pero no ...
La cláusula HAVING
es como la cláusula WHERE
, la diferencia es que los soportes cláusula HAVING
agregan funciones sin necesidad de ellos para ser envuelto en una subconsulta.
RENUNCIA - Sólo he probado esto en SQL Server
HAVING en este caso sólo se llevará a cabo cualquier consulta agregados lo largo de todo el conjunto devuelto. En primer lugar, no se puede ejecutar
SELECT COUNT(field.id), field.id * 10 AS foo FROM table HAVING foo > 100
porque field.id no está contenida en una cláusula que define un grupo o una función de agregado; simplemente no se compila.
Dicho esto, el siguiente SQL -
SELECT COUNT(field.id) FROM table HAVING COUNT(field.id) > 100
devolverá el recuento de filas en la tabla si la cuenta ??strong> es mayor que 100. Si no lo es, no recibirá ningún resultado.
¿Tiene un problema específico en mente? ¿Qué está tratando de contar?