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 :

Recuperer la plus grande valeur ou bien la valeur constante


Sujet :

SQL Oracle

  1. #1
    Débutant  
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

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

    Informations forums :
    Inscription : Février 2007
    Messages : 346
    Points : 86
    Points
    86
    Par défaut Recuperer la plus grande valeur ou bien la valeur constante
    Bonjour, tout le monde

    Au niveau d’une table tab (code, num, nom)
    Je veux récupérer les infos de la table au cas : num est le plus grand ou bien num =10 ;


    J'Utilise cette requête

    select *
    from tab
    order by num desc

    Et j’ai parcours le résultat et j’ai pris le premier résultat mais comment gérer le cas de num = 10 est ce que je dois ajouter having ??

  2. #2
    Membre averti Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Points : 334
    Points
    334
    Par défaut
    Bonjour,


    ça peut-être?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT *
    FROM tab
    WHERE ((num = 10) 
        OR (num = (SELECT MAX(num) 
                   FROM tab)));
    En même temps la question n'est pas précise, est-ce que plusieurs personnes peuvent avoir la même valeur sur le champ num? C'est quoi la clé de la table?


    Cordialement,
    Dariyoosh

  3. #3
    Débutant  
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

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

    Informations forums :
    Inscription : Février 2007
    Messages : 346
    Points : 86
    Points
    86
    Par défaut
    Merci pour votre réponse

    Oui, on a plusieurs personnes peuvent avoir même valeur sur champs num mais je vais ajouter un test sur code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT *
    FROM tab
    WHERE code=’1AND ((num = 10) 
          OR (num = (SELECT MAX(num) 
                   FROM tab)));
    Est ce que ça c est valide?

  4. #4
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Points : 1 197
    Points
    1 197
    Par défaut
    Salut,

    Tu n'as pas besoin de scanner ta table tab deux fois

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT code, num, nom
      FROM (SELECT tab.*, DENSE_RANK () OVER (ORDER BY num DESC)
                                                                               rn
              FROM tab) tab
     WHERE rn = 1 OR num = 10
    Démo
    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
    28
    29
    30
    31
    32
    33
    34
     
    WITH tab AS
         (SELECT 1 code, 30 num, 'Nom1' nom
            FROM DUAL
          UNION ALL
          SELECT 2, 1, 'Nom2'
            FROM DUAL
          UNION ALL
          SELECT 3, 2, 'Nom3'
            FROM DUAL
          UNION ALL
          SELECT 4, 3, 'Nom4'
            FROM DUAL
          UNION ALL
          SELECT 5, 30, 'Nom5'
            FROM DUAL
          UNION ALL
          SELECT 6, 10, 'Nom6'
            FROM DUAL)
    SELECT code, num, nom
      FROM (SELECT tab.*, DENSE_RANK () OVER (ORDER BY num DESC)
                                                                               rn
              FROM tab) tab
     WHERE rn = 1 OR num = 10;
     
     
          CODE        NUM NOM 
    ---------- ---------- ----
             1         30 Nom1
             5         30 Nom5
             6         10 Nom6
     
     
    3 rows selected.

  5. #5
    Débutant  
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

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

    Informations forums :
    Inscription : Février 2007
    Messages : 346
    Points : 86
    Points
    86
    Par défaut
    merci
    mais je n ai pas bien compris

    SELECT code, num, nom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FROM (SELECT tab.*, DENSE_RANK () OVER (PARTITION BY 1 ORDER BY num DESC) rn
    FROM tab) tab
    WHERE rn = 1 OR num = 10
    c a d ici je dois sélectionner mes données + prendre que les éléments de code=1 et order by par num c est ça
    mais comment on doit savoir que PARTITION BY 1 c est pour le champs code et aussi à quoi sert rn?
    soit je n ai pas compris cette requête ou bien il y a quelque chose anormal

  6. #6
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Points : 1 197
    Points
    1 197
    Par défaut
    Salut,

    Moi j'ai supposé que le champ code est unique, mais d'aprés ton dernier poste je vois que non.

    Pour mieux comprendre ton problème, peux-tu poster un échantillon de données plus le résultat souhaité.


    DENSE_RANK () OVER (ORDER BY num DESC) rn = c'est juste une fonction analytique.

    Si tu veux le résultat pour chaque code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT code, num, nom
      FROM (SELECT tab.*,
                   DENSE_RANK () OVER (PARTITION BY code ORDER BY num DESC) rn
              FROM tab) tab
     WHERE rn = 1 OR num = 10;
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    WITH tab AS
         (SELECT 1 code, 30 num, 'Nom1' nom
            FROM DUAL
          UNION ALL
          SELECT 1, 1, 'Nom2'
            FROM DUAL
          UNION ALL
          SELECT 1, 2, 'Nom3'
            FROM DUAL
          UNION ALL
          SELECT 1, 3, 'Nom4'
            FROM DUAL
          UNION ALL
          SELECT 1, 30, 'Nom5'
            FROM DUAL
          UNION ALL
          SELECT 1, 10, 'Nom6'
            FROM DUAL
          UNION ALL
          SELECT 2 code, 30 num, 'Nom10' nom
            FROM DUAL
          UNION ALL
          SELECT 2, 10, 'Nom11'
            FROM DUAL
          UNION ALL
          SELECT 2, 40, 'Nom12'
            FROM DUAL
          UNION ALL
          SELECT 2, 50, 'Nom13'
            FROM DUAL)
    SELECT code, num, nom
      FROM (SELECT tab.*,
                   DENSE_RANK () OVER (PARTITION BY code ORDER BY num DESC) rn
              FROM tab) tab
     WHERE rn = 1 OR num = 10;
     
          CODE        NUM NOM  
    ---------- ---------- -----
             1         30 Nom1 
             1         30 Nom5 
             1         10 Nom6 
             2         50 Nom13
             2         10 Nom11
     
     
    5 rows selected.

  7. #7
    Membre averti Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Points : 334
    Points
    334
    Par défaut
    Citation Envoyé par sonia5 Voir le message
    Merci pour votre réponse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT *
    FROM tab
    WHERE code=’1AND ((num = 10) 
          OR (num = (SELECT MAX(num) 
                   FROM tab)));
    Est ce que ça c est valide?
    pour moi ça a l'air bon, est-ce que le résultat correspond à ce qu'on attend?

Discussions similaires

  1. Déterminer la Valeur la plus grande dans une table
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 9
    Dernier message: 22/08/2014, 23h35
  2. [2008R2] Recuperer la valeur avec la plus grande date
    Par guigui69 dans le forum Développement
    Réponses: 1
    Dernier message: 01/08/2013, 12h47
  3. [WD14] recuperer le plus grand nombre dans une table
    Par devalender dans le forum WinDev
    Réponses: 6
    Dernier message: 03/11/2010, 20h16
  4. Recuperer le plus grand, le plus petit et la moyenne !
    Par ksper92 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 05/04/2007, 16h24
  5. [Tableaux] Recuperer le plus grand indice d'un tableau
    Par schnito dans le forum Langage
    Réponses: 4
    Dernier message: 31/01/2006, 20h01

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