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 :

[Oracle] Requête avec GROUP BY


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2004
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 52
    Points : 35
    Points
    35
    Par défaut [Oracle] Requête avec GROUP BY
    Bonjour à tous,
    je bloque sur une requête avec un GROUP BY. Je précise que ma bdd est sous ORACLE.

    J'ai une table dans laquelle j'ai une colonne ID,une colonne FLAG qui peut être soit à 0 soit à 1 et une colonne DATE. Pour chaque jour j'ai un ID avec son FLAG.
    Je voudrais pouvoir récupérer pour chaque ID le nombre de fois où le flag est à 0.
    J'ai tenté sans trop d'espoir un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT ID,COUNT(*) AS NBR FROM MA_TABLE GROUP BY ID HAVING FLAG=0 ORDER BY NBR;
    Mais ORACLE génère une erreur : "N'est pas une expression GROUP BY" ou alors "Instruction SQL non valide" ça dépend des fois.

    Donc j'ai essayer un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT ID,COUNT(*) AS NBR FROM MA_TABLE WHERE FLAG=0 GROUP BY ID ORDER BY NBR;
    C'est presque ça. Sauf que évidemment la clause WHERE me supprime toute les lignes où FLAG=0 avant de faire le group by. Or moi je voudrais voir apparraitre un 0 pour les ID qui n'ont pas de FLAG à 0.

    La solution doit être simple mais j'avoue être un peu rouillé avec les GROUP BY.

  2. #2
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Une syntaxe correcte est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ID, COUNT(*) AS NBRE
      FROM MA_TABLE
     WHERE FLAG = 0
     GROUP BY ID
    Je voudrais pouvoir récupérer pour chaque ID le nombre de fois où le flag est à 0.
    ...
    Or moi je voudrais voir apparraitre un 0 pour les ID qui n'ont pas de FLAG à 0.
    Quant à voir les enregistrements qui ne correspondent pas aux données demandées, c'est une autre histoire : Dans ce cas, il vaut mieux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ID, FLAG, COUNT(*) AS NBRE
      FROM MA_TABLE
     GROUP BY ID, FLAG
    Et traiter ensuite les enregistrement en fonction de la valeur de Flag

  3. #3
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    bonjour,

    Voila une requete typiquement ORACLE (utilisation du decode) qui pourrait convenir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT
     a.id, 
     SUM(DECODE(COALESC(a.flag,0),1,0,1)) 
    FROM ma_table a GROUP BY a.id)
    J'espere que ca peut t'aider.
    bon courage

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mai 2004
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 52
    Points : 35
    Points
    35
    Par défaut
    Merci beaucoup, ça marche nickel.

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

Discussions similaires

  1. Requête avec Group by sur Oracle 8i
    Par madina dans le forum Oracle
    Réponses: 14
    Dernier message: 16/06/2006, 12h41
  2. requête avec group by
    Par Staron dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/11/2004, 16h30
  3. [Oracle 9i/Export] Pb avec un export full de ma base
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 19
    Dernier message: 23/11/2004, 08h16
  4. lancer le setup d'oracle 9i sous XP avec un pentium 4
    Par caro.g dans le forum Administration
    Réponses: 1
    Dernier message: 12/10/2004, 14h54
  5. update avec group by
    Par slc dans le forum Requêtes
    Réponses: 4
    Dernier message: 05/10/2004, 13h44

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