285 votes

Ce qui ' la différence entre avoir et où ?

Je dois être googler dans le mauvais sens ou je vais avoir un stupide moment dans le temps.

Quelle est la différence entre HAVING et WHERE en SQL SELECT déclaration?

EDIT: j'ai marqué Steven réponse comme correcte, car il contenait la clé de peu d'informations sur le lien:

Lors de l' GROUP BY n'est pas utilisé, HAVING se comporte comme un WHERE clause

La situation que j'avais vu l' WHERE n'ont pas reçu GROUP BY et c'est là où ma confusion a commencé. Bien sûr, jusqu'à ce que vous savez cela, vous ne pouvez pas spécifier dans la question.

Merci beaucoup pour toutes les réponses qui ont été très instructives.

405voto

wcm Points 3898

HAVING est utilisé pour vérifier les conditions après que l’agrégation a lieu.

Lorsqu’est utilisé avant l’agrégation n’ait lieu.

Copiez le code suivant :

Donne un comptage de toutes les villes de MA.

Copiez le code suivant :

Vous donne le nombre de toutes les villes de MA survenant 6 ou plusieurs fois.

100voto

Steven Points 447
<blockquote> <p>HAVING spécifie une condition de recherche pour un groupe ou une fonction d’agrégation utilisée dans l’instruction SELECT.</p> </blockquote> <p><a href="http://blog.sqlauthority.com/2007/07/04/sql-server-definition-comparison-and-difference-between-having-and-where-clause/" rel="nofollow">Source</a></p>

29voto

onedaywhen Points 24594

À partir des réponses ici, il semble que les gens ne se rendent pas compte qu'un HAVING clause peut être utilisé sans GROUP BY de la clause. Dans ce cas, l' HAVING clause est appliquée à l'ensemble de la table d'expression et exige que seules les constantes apparaissent dans l' SELECT de la clause. Généralement, l' HAVING clause entraînera des agrégats.

C'est plus utile qu'il n'y paraît. Considérons, par exemple, cette requête pour tester si l' name colonne est unique pour toutes les valeurs en T:

SELECT 1 AS result
  FROM T
HAVING COUNT( DISTINCT name ) = COUNT( name );

Il y a deux résultats possibles: si l' HAVING clause est vrai, alors le résultat avec une seule ligne contenant la valeur 1, sinon le résultat sera l'ensemble vide.

22voto

Kaiser Advisor Points 817

La clause HAVING a été ajoutée à SQL, parce que le mot clé WHERE ne pouvait servir que des fonctions d’agrégation.

Consultez ce lien w3schools pour plus d’informations

Syntaxe :


Une requête telle que celle-ci :

.. .peut être réécrites à l’aide d’une table sous-jacente (et en omettant le `` ) comme ceci :

12voto

Galwegian Points 29966

est utilisé lorsque vous utilisez un agrégat telles que .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X