Comprendre comment, OÙ travaille avec le GROUPE PAR l'Agrégation et de l'
Ma requête -
select cu.CustomerID,cu.FirstName,cu.LastName, COUNT(si.InvoiceID)as inv --1
from Customer as cu inner join SalesInvoice as si --2
on cu.CustomerID = si.CustomerID -- 3
-- put the WHERE clause here ! --4
group by cu.CustomerID,cu.FirstName,cu.LastName -- 5
where cu.FirstName = 'mark' -- 6
De sortie avec le code correct -
Erreur que je reçois - syntaxe Incorrecte près du mot clé "où".
Pouvez-vous me dire pourquoi j'ai cette erreur ? Je veux savoir pourquoi, d'OÙ vient avant le GROUPE et non après.
En bas de l'électeur ! soin d'expliquer pourquoi vous vers le bas a voté ?
Merci pour toutes les bonnes réponses. Il a été difficile de choisir l'un d'eux. Mais, je devais choisir un seul.
Merci pour toutes les bonnes réponses. Il a été difficile de choisir l'un d'eux. Mais, je devais choisir un seul.
OriginalL'auteur david blaine | 2012-12-22
Vous devez vous connecter pour publier un commentaire.
Vous avez l'ordre de mal. Le
WHERE
clause de passe avant laGROUP BY
:Si vous souhaitez effectuer un filtre après le
GROUP BY
, vous devrez alors utiliser uneHAVING
clause:Un
HAVING
clause est généralement utilisé pour la fonction globale de filtrage, il est donc logique que ce serait appliqué après leGROUP BY
Pour en savoir plus sur l'ordre des opérations est article expliquant l'ordre. À partir de l'article de la commande de l'opération dans SQL est:
À l'aide de cette commande, vous appliquez le filtre dans le
WHERE
avant unGROUP BY
. LeWHERE
est utilisé pour limiter le nombre d'enregistrements.Pensez-y de cette façon, si vous avez été l'application la
WHERE
après alors vous seriez de retour à plus d'enregistrements vous pouvez groupe. L'appliquant d'abord, réduit le jeu d'enregistrements, puis applique le regroupement.voir mon edit, y compris un article sur l'ordre des opérations sql -- bennadel.com/blog/70-SQL-Query-Order-of-Operations.htm
OriginalL'auteur Taryn
La
where
clause vient avant legroup by
parce que conceptuellement vous filtre avant de le groupe, pas après. Vous voulez limiter la sortie de l'groupé à celles qui correspondent plutôt que d'effectuer le regroupement sur les éléments que vous voulez, potentiellement, de jeter à cause du filtre.exactement
OriginalL'auteur tvanfosson
SQL ne permet pas de filtrer les résultats d'un GROUPE, qui s'appelle la clause HAVING.
Si vous souhaitez filtrer quelque chose qui pourrait être déterminée avant le regroupement (c'est à dire tout le monde avec Prenom = "Mark"), c'est fait via et OÙ.
Cependant, si vous souhaitez filtrer sur tout le monde avec 4 ou plusieurs factures (c'est à dire, quelque chose que vous ne savez pas jusqu'à ce que après faire le compte), puis servez-vous d'AVOIR.
Je me demande pourquoi AVOIR peux faire ce que je veux, mais OÙ ne peux pas faire. Étrange
Qu'est-ce que vous voulez? Pour filtrer uniquement sur les personnes nommées Marque? OÙ est tout à fait possible de le faire.
OriginalL'auteur ExactaBox
La
WHERE
clause est utilisée avantGROUP BY
, parce qu'il fait plus de sens. Le filtre spécifié dans leWHERE
clause est utilisée avant le regroupement. Après le regroupement, vous pouvez avoir unHAVING
clause, qui est similaire àWHERE
, sauf que vous pouvez filtrer par agrégation des valeurs.Comparer:
contre
OriginalL'auteur GolezTrol
Disons que vous avez 100 000 personnes dans votre base de données. 9 d'entre eux sont nommés Marque. Pourquoi la base de données n'a Compter de l'opération sur l'ensemble des 100 000, puis jeter le 99,991 n'a PAS de nom de Marque? Il ne semble pas plus intelligent de filtrer les Marques de première, puis de faire le Décompte seulement 9 fois? Rend l'opération beaucoup plus rapide.
SQL n'est pas nécessairement exécutés de haut en bas et les optimiseurs de jour moderne SGBD de faire beaucoup plus intelligent de choses que cela. La Performance n'est pas un problème. Je pense que la raison est beaucoup plus à des fins de lisibilité et de cohérence.
peut-être en 2012, l'optimiseur de moteur est assez intelligent... je suis sûr qu'il n'en était pas ainsi lorsque SQL a été développé à l'origine.
OriginalL'auteur ExactaBox