Clauses SQL

kadden Messages postés 249 Date d'inscription   Statut Membre Dernière intervention   -  
 fiu -
Bonjour,

Est ce qu'on peut utiliser la clause "HAVING"
avec la clause "WHERE" ?

dans la même requête SQL

Merci
A voir également:

5 réponses

fiu
 
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
0
kadden Messages postés 249 Date d'inscription   Statut Membre Dernière intervention   9
 
{ => 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
0
fiu
 
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 que
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'
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
0
kadden Messages postés 249 Date d'inscription   Statut Membre Dernière intervention   9
 
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiu
 
la confirmation est
0