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 :

Requête compliquée, une idée ?


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Requête compliquée, une idée ?
    Bonjour,

    J'ai une table, ci-jointe, sur laquelle je souhaite connaitre le produit pour laquelle j'ai le plus fort taux de réduction toutes promos confondues.

    Il ne doit plus y avoir de doublon sur les produits.

    Merci !! et bonne chance ...
    Images attachées Images attachées  

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Et s'il y a exaequo ?

    Cette requête vous les sortira tous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT LesColonnes
    FROM LaTable
    WHERE TauxReduction = (SELECT MAX(TauxReduction) FROM LaTable)

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    S'il y a un exæquo, il faut prendre de premier qu'on trouve.

    Par contre, cette requête ne retourne qu'une seule ligne avec le MAX de la collection.

    Le résultat attendu doit faire un distinct des produits avec le taux de remise le plus important (voir la PJ ).
    Images attachées Images attachées  

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par arrrr Voir le message
    S'il y a un exaequo, il faut prendre de premier qu'on trouve.
    Sans critère ??? cela veut dire que deux exécutions successives pourraient donner des résultats différents...


    Quel est votre SGBDR ?

    Par contre, cette requete ne retourne qu'une seule ligne avec le MAX de la collection.

    Le résultat attendu doit faire un distinct des produits avec le taux de remise le plus important ( voir la PJ )
    Vous voulez donc la meilleure promo par produit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT R.LesColonnes
    FROM LaTable R
    INNER JOIN (
        SELECT Produit, MAX(TauxReduction) AS Reduc
        FROM LaTable
        GROUP BY Produit
    ) T
        ON T.Produit = R.Produit
        AND T.Reduc = R.Reduc

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Yes, je n'avais pas pensé à utiliser une requête pour la jointure !!

    Reste à ne plus prendre qu'une seule valeur lorsque la remise est identique.

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par arrrr Voir le message
    Yes, j'avais pas pensé à utilisé une requête pour la jointure !!

    Reste plus qu'à prendre qu'une seule valeur lorsque la remise est identique
    En connaissant votre SGBDR, on pourrait trouver une requête spécifique, mais en voici une plus générale.

    Comme visiblement vous n'avez aucune préférence sur la promo qui ressortira en cas d'ex æquo, on va prendre arbitrairement celle qui a l'ID le plus élevé...

    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
     
    SELECT R.LesColonnes
    FROM LaTable R
    INNER JOIN ( -- reduction max par produit
        SELECT Produit, MAX(TauxReduction) AS Reduc
        FROM LaTable
        GROUP BY Produit
    ) T
        ON T.Produit = R.Produit
        AND T.Reduc = R.Reduc
    INNER JOIN ( --idPromo max par produit et reduc
        SELECT Produit, TauxReduc AS Reduc, MAX(Promo) AS Promo
        FROM LaTable
        GROUP BY Produit
    ) P
        ON P.Produit = R.Produit
        AND P.Reduc = T.Reduc
        AND P.Promo = R.Promo

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Super, encore merci !!

    Pour info, je suis sur PostgreSql

Discussions similaires

  1. Une requête compliquée
    Par renaud26 dans le forum Requêtes
    Réponses: 13
    Dernier message: 28/03/2012, 14h54
  2. Aide pour une requête compliquée
    Par DiPSoMaNiE dans le forum Langage SQL
    Réponses: 8
    Dernier message: 24/05/2011, 15h31
  3. Besoin d'aide pour une requète compliquée
    Par Tonii dans le forum SQL
    Réponses: 13
    Dernier message: 27/11/2009, 14h41
  4. Problème requête... une idée ??
    Par Sekigawa dans le forum Langage SQL
    Réponses: 6
    Dernier message: 18/11/2008, 20h02
  5. Besoin d'aide pour une requête compliquée
    Par Chekov dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/01/2008, 10h59

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