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 :

Aide requête SQL sur le plus mauvais joueur


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de predalpha
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 392
    Par défaut Aide requête SQL sur le plus mauvais joueur
    Bonjour,

    J'ai du mal à effectuer une requête me retournant le plus mauvais joueur.
    Le plus mauvais joueur serait le joueur qui a le plus de défaites (de tous les joueurs confondus) ainsi que le moins de victoires chez les joueurs ayant le plus de défaites en cas de joueurs ex-aequo.

    JOUEUR 1 - 5 Victoires - 2 DEFAITES
    JOUEUR 2 - 1 Victoires - 4 DEFAITES
    JOUEUR 3 - 0 Victoires - 4 DEFAITES

    Actuellement ma requête affiche le Joueur 2 et 3 alors que je ne souhaiterais avoir que le joueur 3


    Voici la structure de la table que j'obtiens pour faire cette requête :

    IDJOUEUR - INTEGER
    VICTOIRES - INTEGER
    DEFAITES - INTEGER

    Ma requête qui ne fonctionne pas (car elle affiche des ex-aequo là où il ne devrait pas y en avoir) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT IDJOUEUR, VICTOIRES, DEFAITES
    FROM MATABLE
    WHERE VICTOIRE <= SOME (SELECT VICTOIRES FROM MATABLE) -- je pense que cela coince ici
    AND DEFAITES >= ALL (SELECT DEFAITES FROM MATABLE)
    Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 764
    Par défaut SQL Oracle
    Bonjour,

    En SQL oracle, j'ai trouvé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Joueur, VICTOIRE, DEFAITE
    FROM MATABLE 
    WHERE DEFAITE = (SELECT MAX(DEFAITE) FROM MATABLE) 
    AND  VICTOIRE = (SELECT MIN(VICTOIRE) FROM MATABLE);
    Par contre, ce code ne sort rien si le joueur a le max de défaites et le max de victoires. Pour améliorer le test, vous devriez ajouter une ligne comme celle-ci :
    JOUEUR4 - DEFAITES : 5 - VICTOIRES : 3

    J'espère que cela vous aidera ...


  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 764
    Par défaut
    Re !

    Grâce à mon collègue Clément qui m'a aidé à trouver une solution, voici le code SQL oracle qui fonctionne bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT JOUEUR, DEFAITE, VICTOIRE
      FROM MATABLE 
      WHERE DEFAITE = (SELECT MAX(DEFAITE) FROM MATABLE)
        AND VICTOIRE = (
      SELECT MIN(VICTOIRE) FROM(
       SELECT DEFAITE, VICTOIRE, JOUEUR
       FROM MATABLE 
       WHERE DEFAITE = (SELECT MAX(DEFAITE) FROM MATABLE)
      )
    );

  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
    Par défaut
    Citation Envoyé par predalpha Voir le message
    Le plus mauvais joueur serait le joueur qui a le plus de défaites (de tous les joueurs confondus) ainsi que le moins de victoires chez les joueurs ayant le plus de défaites en cas de joueurs ex-aequo.
    Il faut donc classer les joueurs selon cette définition, et prendre le premier !

    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
     
    WITH CTE AS (
        SELECT 
            Joueur
            ,Defaite
            ,Victoire
            ,RANK() OVER (ORDER BY Defaite DESC, Victoire) AS Rk
        FROM MaTable
    )
    SELECT 
            Joueur
            ,Defaite
            ,Victoire
    FROM CTE
    WHERE Rk= 1

  5. #5
    Membre chevronné Avatar de predalpha
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 392
    Par défaut
    Merci messieurs pour votre aide.

    Les 2 solutions semblent bien fonctionner.
    Je garde la seconde pour la facilité de lisibilité (et parce que je n'utilisais pas les CTE)

    Merci encore à vous.

    PS : pour ceux que l'exemple de aieeeuuuu intéresserait, il manque simplement la clause FROM à l'intérieur du WITH

  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
    Par défaut
    Citation Envoyé par predalpha Voir le message
    PS : pour ceux que l'exemple de aieeeuuuu intéresserait, il manque simplement la clause FROM à l'intérieur du WITH

    En effet, merci de l'avoir indiqué, je vais éditer la requête

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 764
    Par défaut
    Re bonjour,

    Si je peux me permettre, le fait de prendre le premier joueur ne me semble pas le meilleur choix. En effet, si deux joueurs sont à égalité pour le trophée du pire joueur, en ne prenant que le premier il vous manquera un joueur.

    @predalpha :
    PS : pour ceux que l'exemple de aieeeuuuu intéresserait, il manque simplement la clause FROM à l'intérieur du WITH
    Pourriez-vous ré-écrire le code de Aieeueue sans le manque s'il vous plaît ? Car j'ai l'impression que le FROM est bien dans le WITH. Merci.

    Bonne journée,

  8. #8
    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
    Par défaut
    Avec la requête que j'ai proposée, s'il y a deux joueurs exæquo, ils ressortiront tous les deux

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/01/2006, 19h35
  2. requêtes sql sur plusieurs tables
    Par zahiton dans le forum Langage SQL
    Réponses: 4
    Dernier message: 25/11/2005, 11h59
  3. [SQL] requêtes SQL sur plusieurs tables
    Par zahiton dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/11/2005, 17h32
  4. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 17h26

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