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

SQL Oracle Discussion :

GROUP BY et séléction d'une ligne


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 37
    Par défaut GROUP BY et séléction d'une ligne
    Bonjour,

    J'ai une table contenant 3 colonnes dans lesquelles je dois récuperer pour chacune des differentes lignes de la premiere colonne les valeurs des 2 autres colonnes telle que la valeur la de la 2ème colonne soit la max.

    Un petit exemple pour aider a comprendre :

    Voila ma table :
    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
     
     
    c1	c2	c3
    ----------------------
    a	1000	10
    a	980	9
    a	970	8
    a	1100	11
    b	200	10
    b	3000	1
    c	700	8
    c	800	9
    c	900	10
    d	1000	10
    d	1100	11
    d	900	9
    d	1000	10
    Et voici le résultat que j'aimerais obtenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    c1	c2	c3
    ----------------------
    a	1100	11
    b	3000	1
    c	900	10
    d	1100	11
    en gros, pour c1=a je veux la valeur c2 la plus grande et la c3 associée
    et ca pour chacune des diferrentes valeurs de c1

    J'ai essayé 2/3 choses ( avec des HAVING, ... mais toujours des problemes de "Not a group by expression") ou alors ca me renvoie pas la bonne valeur associée.

    Si quelqu'un a une idée, merci d'avance.

  2. #2
    Membre émérite Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Par défaut
    Hello

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    Select V1.C1,V1.C2,v2.C3
    From
    (select C1,Max (C2) C2 from tst group by C1) V1,
    (Select C1,C2,C3 from tst) V2
    Where V1.C1 = v2.C1 and
          V1.C2  = V2.C2;
    Ca ca marche
    Jko

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Vous pouvez aussi utiliser les fonctions FIRST / LAST :
    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
    22
    23
    24
    25
    26
    27
    WITH MaTable AS
    (
    select 'a' as col1, 1000 as col2, 10 as col3 from dual union all
    select 'a'        ,  980        ,  9         from dual union all
    select 'a'        ,  970        ,  8         from dual union all
    select 'a'        , 1100        , 11         from dual union all
    select 'b'        ,  200        , 10         from dual union all
    select 'b'        , 3000        ,  1         from dual union all
    select 'c'        ,  700        ,  8         from dual union all
    select 'c'        ,  800        ,  9         from dual union all
    select 'c'        ,  900        , 10         from dual union all
    select 'd'        , 1000        , 10         from dual union all
    select 'd'        , 1100        , 11         from dual union all
    select 'd'        ,  900        ,  9         from dual union all
    select 'd'        , 1000        , 10         from dual
    )
      select col1, max(col2) as col2,
             max(col3) keep(dense_rank first order by col2 desc) as col3 
        from MaTable
    group by col1
    order by col1 asc;
     
    COL1	COL2	COL3
    a	1100	11
    b	3000	1
    c	900	10
    d	1100	11
    Attention à ce que vous voulez faire en cas d'égalité, cette méthode ne renverra qu'une seule ligne par col1.

  4. #4
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 37
    Par défaut
    Alors, parfait, merci beaucoup.

    J'ai essayé les 2 méthodes, et les 2 marchent correctement.
    En revanche Ma requete générale est bien plus grosse (ceci n'etait qu'une sous-requete) et a l'intérieur de celle-ci, la première méthode me génére une erreurde dépassement de capacité (une histoire avec 128 tables max)

    Bref en tout cas elle marche mais je ne peux pas l'utiliser pour ce que j'ai besoin

    Sinon la 2ème méthode fonctionne très bien meme a l'intérieur de ma requete.

    Merci encore a tous les 2.

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

Discussions similaires

  1. Tester si une ligne appartiens à un groupe
    Par mazuno dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/07/2011, 17h20
  2. Tester si une ligne appartient à un groupe
    Par iluron dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/07/2011, 16h45
  3. JTable - Couleur de séléction d'une ligne
    Par nabich dans le forum Composants
    Réponses: 19
    Dernier message: 27/12/2010, 22h24
  4. Insertion d'une ligne blanche entre groupe après le tri
    Par Chris1972 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/11/2010, 19h42
  5. Identifier une ligne Excel en groupe ou sous-groupe
    Par gilles06 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 09/01/2008, 17h57

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