IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

COUNT, GROUP BY et HAVING


Sujet :

Langage SQL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 49
    Par défaut COUNT, GROUP BY et HAVING
    Bonjour,

    Je voudrais compter le nombre d'enregistement dans une table qui correspondent a certains criteres.

    Lorsque je fait la requetes suivante j'ai mon TOTAL = X (X est un nombre) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) AS total FROM test_occ WHERE ID_MOT='784044' OR ID_MOT='93318'
    Mais lorsque je met des conditions + GROUP BY ET HAVING ca ne me donne plus le TOTAL mais la liste des resultat avec TOTAL = 2, et le nombre de resultat que la requete retourne correspond au bon total (correspondant au group et au having) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) AS total FROM test_occ WHERE ID_MOT='784044' OR ID_MOT='93318' GROUP BY ID_ARTICLE HAVING COUNT(ID_ARTICLE) = '2'
    Qq'un aurait un idee comment faire en utilisant COUNT(*) ds un soucis de rapidite ?

    D'avance Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 132
    Par défaut
    Les résultats présentés par ta requête correspondent bien à ce que tu as demandé, avec une ligne pour chaque ID_ARTICLE correspondant au filtre de HAVING.
    Maintenant, si tu cherches la somme de ces lignes, il faut faire un nouveau regroupement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT  SUM(cnt.nb) AS total
    FROM    (   SELECT  COUNT(*) AS nb 
                FROM    test_occ 
                WHERE   id_mot  IN ('784044', '93318') 
                GROUP BY id_article 
                HAVING  COUNT(id_article) = 2
            )   AS cnt
    ;
    Tu peux aussi faire comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT  COUNT(*) AS total
    FROM    test_occ
    WHERE   id_mot  IN ('784044', '93318')
        AND id_article IN
            (   SELECT  id_article 
                FROM    test_occ 
                WHERE   id_mot  IN ('784044', '93318') 
                GROUP BY id_article 
                HAVING  COUNT(id_article) = 2
            )
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 49
    Par défaut
    Merci bcp pour la lecon ... ;-)
    C'est parfait

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. GROUP BY et HAVING MAX
    Par dragoon83 dans le forum Requêtes
    Réponses: 6
    Dernier message: 11/06/2014, 11h55
  2. Problème de requete, COUNT, GROUP BY etc.
    Par TheRedLed dans le forum Requêtes
    Réponses: 3
    Dernier message: 22/05/2007, 15h03
  3. Requete SQL : COUNT GROUP BY
    Par Florent08800 dans le forum Requêtes
    Réponses: 3
    Dernier message: 06/10/2006, 10h04
  4. fonction: renvoyer résultat d'un count .. group by ?
    Par ctobini dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 26/09/2006, 14h21
  5. GROUP BY et HAVING dans un UPDATE
    Par MashiMaro dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/08/2003, 08h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo