Question

Vous pouvez habituellement juste faire

SELECT COUNT(field.id) FROM table WHERE field.id > 100

et COUNT (champ) retourne le nombre d'entrées que comporte le critère de field.id> 100

Mais si vous quoi compter les entrées spécifiées avec le critère HAVING tels que

SELECT COUNT(field.id), field.id * 10 AS foo FROM table HAVING foo > 100

le code ne fonctionnerait pas dans ce cas ....

Comment puis-je sur les entrées de comptage dont le critère sont spécifiées par la clause HAVING?

Merci à l'avance

Était-ce utile?

La solution

Eh bien, fonctionne COUNT AVANT HAVING est appliqué à la jeu de résultats . Donc, si vous avez besoin de compter leur nombre -. Vous devez envelopper votre requête avec un autre

SELECT COUNT(*) FROM (
    SELECT field.id * 10 AS foo FROM table HAVING foo > 100
)

Autres conseils

Je ne peux pas exécuter la requête soit en l'état - ils me donnent une erreur 1140 pour « en utilisant un agrégat sans clause GROUP BY » (IE: COUNT(field.id)). Tout ne semble pas concerner l'ensemble du tout, juste la possibilité de référencer l'alias de colonne pour la comparaison ...

Le moyen le plus largement pris en charge est:

SELECT field.id * 10 AS foo 
  FROM table 
 WHERE field.id * 10 > 100

MySQL ne supporte référence à un alias de colonne dans la clause GROUP BY ou HAVING. Il ne nécessite pas l'utilisation des accents graves, mais je l'ai vu des cas qui ne travaillerait (mots non réservés) jusqu'à présent étaient les apostrophes inverses:

SELECT field.id * 10 AS foo 
  FROM table 
HAVING `foo` > 100

Je ne recommande pas cette approche - il est pris en charge sur SQL Server, mais pas Oracle ...

La clause HAVING est comme la clause de WHERE, la différence est que les supports de clause de HAVING les fonctions d'agrégation sans les avoir besoin d'être enveloppé dans une sous-requête.

AVERTISSEMENT - Je n'ai testé cela sur SQL Server

HAVING dans ce cas, n'effectuer des requêtes agrégées sur l'ensemble du jeu retourné. tout, vous ne pouvez pas exécuter d'abord

SELECT COUNT(field.id), field.id * 10 AS foo FROM table HAVING foo > 100

car field.id ne se trouve pas dans une clause qui définit un groupe ou une fonction d'agrégation; il ne fonctionne tout simplement pas compilé.

Cela dit, l'instruction SQL suivante -

SELECT COUNT(field.id) FROM table HAVING COUNT(field.id) > 100

retourne le nombre de lignes dans le tableau si le compte est supérieur à 100. Si ce n'est pas, vous obtiendrez aucun résultat.

Avez-vous un problème spécifique à l'esprit? Qu'est-ce que vous essayez de compter?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top