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 :

Problème pour récupérer le maximum de 2 valeurs


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 618
    Par défaut Problème pour récupérer le maximum de 2 valeurs
    Bonjour,

    Je souhaite récupérer le maximum entre 2 valeurs contenues dans 2 tables différentes via SQL pour un même identifiant.
    J'ai regardé les cours SQL mais je ne vois pas la solution à mon problème.
    Je suis sous ORACLE.

    Merci d'avance.
    Julien.

  2. #2
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    Solution barbare peut être mais ca va marcher

    Fait deux requêtes séparer avec union puis un max sur le champ.
    Avec un exemple ca serra plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT MAX(champ)
    FROM 
    (
    SELECT champ1 as 'champ'
    FROM table1
    UNION
    SELECT champ2
    FROM table2
    )
    2ème solution: Il me semble que la fonction GREATEST existe sous oracle aussi, en tout cas sous Mysql cela fonctionne très bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT MAX(GREATEST(champ1 , champ2))
    FROM
    ( 
        SELECT 1  as champ1 UNION ALL
        SELECT 2
    )TABLE1,
    (
        SELECT 3  as champ2 UNION ALL
        SELECT 2
    )TABLE2

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 618
    Par défaut
    En fait, je cherche à faire quelque chose comme cela sous Oracle mais cela ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select max (table1.a,table2.b), table1.id
                       where table1.id = table2.id
    Julien.

  4. #4
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    As-tu essayé ma solution?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT max (GREATEST(table1.a,table2.b)), table1.id
                       WHERE table1.id = table2.id

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 127
    Par défaut
    Bonjour,
    La solution de david55 avec GREATEST est bonne dans ce cas, mais il faut à mon avis enlever le max(), sinon tu n'aura qu'une valeur : la plus grande des 2 valeurs entre la valeur maxi de la colonne b et la valeur maxi de la colonne a, mais je ne crois pas que c'est ce que tu veux.

    Si tu veux utiliser autre chose que greatest , ce qui permet de faire d'autres type de comparaisons que le max, le mieux est d'utiliser sous Oracle qui permet de faire un if then else comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    -- Sous Oracle 
    SELECT
      CASE WHEN table1.a >= table2.b THEN table1.a ELSE table2.b END,table1.id
    FROM 
      table1, table2
    WHERE
      table1.id = table2.id
    Cordialement

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

Discussions similaires

  1. Problème pour récupérer valeurs d'un ComboBox
    Par david71 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 07/08/2007, 11h10
  2. Réponses: 2
    Dernier message: 22/05/2007, 16h15
  3. Réponses: 4
    Dernier message: 13/12/2006, 00h08
  4. Réponses: 1
    Dernier message: 03/12/2005, 12h24
  5. problème pour récupérer une valeur dans ma bd (débutante)
    Par auryn111 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/08/2005, 17h49

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