Clauses SQL
kadden
Messages postés
311
Statut
Membre
-
fiu -
fiu -
Bonjour,
Est ce qu'on peut utiliser la clause "HAVING"
avec la clause "WHERE" ?
dans la même requête SQL
Merci
Est ce qu'on peut utiliser la clause "HAVING"
avec la clause "WHERE" ?
dans la même requête SQL
Merci
5 réponses
-
Salut
La clause HAVING est un filtre de regroupement. Elle ne s'utilise qu'en présence de GROUP BY et filtre normalement une fonction récapitulative
=> le WHERE va filtrer les lignes sur lesquelles se basera le regroupement
=> le HAVING va filtrer les lignes du résultat regroupé
comme les fonctionnalités sont distinctes, on peut les utiliser dans la même requête -
{ => le WHERE va filtrer les lignes sur lesquelles se basera le regroupement
=> le HAVING va filtrer les lignes du résultat regroupé }}
J'ai bien compris que le Where était un filtre,
à partir d'une valeur, il affiche toutes les lignes qui ont le critères du filtre en commun
Par contre je ne vois pas ce que Having fait de plus, peux tu stp illustrer par un exemple
Merci -
Salut,
select idClient, to_char(dtEmission, 'mm'), sum(mtPU * nbQte) from client c, facture f, ligne_facture l where c.idClient = f.idClient and f.idFacture = l.idFacture and to_char(dtEmission, 'yyyy') = '2009' and (mtPU * nbQte) > 10000 group by idClient, to_char(dtEmission, 'mm')
ne renverra pas la même chose queselect idClient, to_char(dtEmission, 'mm'), sum(mtPU * nbQte) from client c, facture f, ligne_facture l where c.idClient = f.idClient and f.idFacture = l.idFacture and to_char(dtEmission, 'yyyy') = '2009' group by idClient, to_char(dtEmission, 'mm') having sum(mtPU * nbQte) > 10000
car dans la 1ere requete, on ne cherche que les lignes de facture supérieures à $10000 alors que dans la seconde, on veut que le cumul soit supérieur à $10000
dans le 1er, on ne verra pas Acme qui nous achète de l'eau déshydratée pour $500 tous les jours alors que dans le second, Acme apparaitra car son CA mensuel sera à $15000 -
En gros si j'ai bien compris la clause Where
est seulement pour Filtrer les champs,
et la clause Where c'est seulement pour filtrer les calcules de champs, ou un filtrage sur les fonctions de calcules :
Where champ1 + 3 > champ2
Having Sum(champ2 + 3) < Sum(champ1)
Merci de me confirmer -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
la confirmation est là