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 :

group by problématique


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Mars 2004
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 162
    Points : 75
    Points
    75
    Par défaut group by problématique
    Bonjour, j'ai un problème avec la requete suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(*) from table where num in (1,2,3,4,5) group by num;
    En effet le résultat retourné est:
    COUNT(*)
    ----------
    9
    18
    En fait, il ne m'affiche uniquement les sommes pour lesquelles des num existent: en l'occurence 1 et 3 ici. J'aimerais avoir un résultat de la forme:
    COUNT(*)
    ----------
    9
    0
    18
    0
    0
    Comment faire ?!!
    ---
    Erwan

  2. #2
    Membre actif
    Inscrit en
    Février 2003
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 182
    Points : 206
    Points
    206
    Par défaut
    reprends ta requête ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select num ,count(*) 
    from table 
    where num in (1,2,3,4,5) 
    group by num

    A+

  3. #3
    Membre confirmé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 398
    Points : 641
    Points
    641
    Par défaut
    Bonjour,
    une petite précision, tu dois faire une jointure externe sur une table dans laquelle num existe.
    Si c'est possible, la requête serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT count(b.num)
    FROM   table_num a 
           LEFT OUTER JOIN table b
                ON a.num = b.num
    WHERE  a.num in (1,2,3,4,5)
    group by a.num
    La faiblesse humaine est d'avoir des curiosités d'apprendre ce qu'on ne voudrait pas savoir

  4. #4
    Membre confirmé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 398
    Points : 641
    Points
    641
    Par défaut
    Encore une précision, pour la requête donnée, il faut aussi que num soit unique dans la table table_num, sinon il faudrait faire une requête imbriquée dans la clause from.
    La faiblesse humaine est d'avoir des curiosités d'apprendre ce qu'on ne voudrait pas savoir

  5. #5
    Membre régulier
    Inscrit en
    Mars 2004
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 162
    Points : 75
    Points
    75
    Par défaut
    moui pas d'autre choix que de créer une autre table en effet...
    ---
    Erwan

  6. #6
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 54
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par ebaynaud
    moui pas d'autre choix que de créer une autre table en effet...
    Absolument inutile, une table "virtuelle" suffit amplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    SELECT 
           coalesce(  B.nb , 0 ) 
    FROM
          ( select
                       distinct num
            from  
                       table_num 
           ) as A 
         LEFT  JOIN 
          ( select
                       num , count( * ) nb
            from
                      table_num  
            WHERE  
                      num in ( 1 , 2 , 3 , 4 , 5 ) 
            group by
                      num
           ) as B
          ON 
             A.num = B.num
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    SELECT 
           sum( A.NB ) 
    FROM
          ( select
                       num ,
                       case
                          when num in ( 1 , 2 , 3 , 4 , 5 ) then 1
                          else 0
                       end NB
            from  
                       table_num 
           ) as A
    group by
              A.num

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/09/2014, 11h32
  2. [CR8] Groupes nommés par ordre spécifié
    Par PschittN dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 17/05/2004, 23h46
  3. [RaveReport] - Bloquer groupe sur une page
    Par muaddib dans le forum Rave
    Réponses: 3
    Dernier message: 25/02/2003, 16h21
  4. gestion des groupes
    Par muaddib dans le forum QuickReport
    Réponses: 3
    Dernier message: 31/12/2002, 11h01

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