Clauses SQL

kadden Messages postés 311 Statut Membre -  
 fiu -
Bonjour,

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

dans la même requête SQL

Merci

5 réponses

  1. 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
  2. kadden Messages postés 311 Statut Membre 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
  3. 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
  4. kadden Messages postés 311 Statut Membre 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question