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

¿Fue útil?

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 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?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top