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 :

[GroupBy] Choisir le 2eme elements


Sujet :

Langage SQL

  1. #1
    raj
    raj est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 112
    Points : 100
    Points
    100
    Par défaut [GroupBy] Choisir le 2eme elements
    Bonjour ,

    Mon pb est que je dispose d'une table dans laquelle je veux regrouper les élements ayant une colonne commune dans une autre table (jointure et group by, pas de pb pour l'instant ) .
    Le truc c'est que je veux que le regroupage final soit trié afin de ne prendre (c'est la le pb) que le 2eme element.

    Je ne veux pas d'un order by après le group by, ce que je veux c'est que la fonction utiliser pour regrouper fasse :

    1) Trier les élements.
    2) Prendre le 2eme elements .

    Merci d'apporter une réponse ou une piste

  2. #2
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Tu es sous quel SGBD ?
    Si c'est Oracle un rownum te permetera de ne prendre que le second.
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  3. #3
    raj
    raj est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 112
    Points : 100
    Points
    100
    Par défaut
    Slt ze_key
    Je suis sur Oracle ,
    peut-tu me donner un exemple d'une tel requete

    (un truc générique avec des tables bidon, juste pour voir la forme )

  4. #4
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT * 
       FROM (
    SELECT field1,field2
       FROM table_1
    GROUP BY field1, field2
    )
    WHERE ROWNUM=2
    Attention il est important de savoir que rownum est attribué avant un eventuel tri ou groupement donc si tu veux un tri cela donnera.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT field1,field2
      FROM  (
                SELECT field1,field2 
                   FROM (
                             SELECT field1,field2
                                FROM table_1
                         GROUP BY field1, field2
                            )
                  ORDER BY field1
                 )
    WHERE ROWNUM=2
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  5. #5
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Je ne suis pas certain d'avoir compris la question, mais si le problème est d'obtenir uniquement le deuxième enregistrement renvoyé par une requête, il faut avant tout définir un ordre, et éviter deux pièges : ROWNUM est calculé avant les tris et ROWNUM est le N° de ligne renvoyé, donc il est impossible de préciser and ROWNUM = 2, car le 1 ne sera jamais renvoyé, par conséquent il ne pourra y avoir de 2...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT LeChamp
    FROM (SELECT leChamp, Rownum as Numero
          FROM (SELECT leChamp
                FROM laTable
                ORDER BY leTri))
    WHERE Numero = 2
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  6. #6
    raj
    raj est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 112
    Points : 100
    Points
    100
    Par défaut
    Oui je vois ce que la requete fait
    Mais malheureusement ce que je souhaite faire est plus
    complexe .

    Je ne veux pas prendre la 2eme ligne dans le résultat final ,
    en faite je cherche une sorte de fonction d'aggrégation qui prenne uniquement le 2 element (suivant ma colonne de tri ) .

    Un exemple valant mieux qu'un long discours :

    select
    myaggregate(colonne_tri,2)
    from
    TABLE
    group by
    colonne_group


    Ici myaggregate regroupe les données (colonne_group)
    en les triant suivant colonne_tri et ne prenant que le 2eme.
    (une sorte de fonction max ou min mais qui retourne pas le 1er mais
    le 2eme )


    Existe-t-il une fonction d'aggregation qui fasse cela (peut etre spécifique à Oracle ? ) .
    Sinon y a-til un moyen de contournement .

  7. #7
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Ok par élément tu voulais dire colonne et pas ligne, c'est ca ?
    Sinon donne nous un exemple complet.
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  8. #8
    raj
    raj est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 112
    Points : 100
    Points
    100
    Par défaut
    Pour clarifier tout ca :

    Existe-il une fonction d'aggrégation sous Oracle qui réalise une fonction similaire à MAX(), mais qui prend prend le deuxième élement de chaque groupe trié au lieu du premier ?

  9. #9
    raj
    raj est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 112
    Points : 100
    Points
    100
    Par défaut
    Apparemment , une fonction analytique pourrait etre la solution à
    mon pb . (sous oracle )


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ROW_NUMBER() OVER 
      ([PARTITION BY <value expression1> [, ...]]
        ORDER BY <value expression2> [collate clause] [ASC|DESC]
          [NULLS FIRST | NULLS LAST] [, ...])

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    Je suis sûr qu'une solution en pur SQL existe. Mais pour cela il faudrait poser tes tables, les données et le résultat que tu veut obtenir en resecptant cela :
    http://www.developpez.net/forums/viewtopic.php?t=32668

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. choisir element d'une liste deroulante
    Par debutantasp dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/02/2008, 13h41
  2. choisir ds une liste charge une autre liste par les bons elements
    Par kamaldev dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/07/2006, 10h06
  3. Comment faire pour choisir entre plusieur elements d'un filelist ?
    Par MegaBigBoss dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 21/07/2006, 18h51
  4. Choisir un élément au hasard dans un tableau
    Par ousunas dans le forum Langage
    Réponses: 1
    Dernier message: 25/02/2006, 19h50
  5. [XML][debutant] Organisation d'elements que choisir ???
    Par Shiryu44 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 18/04/2005, 14h23

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