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

Requêtes MySQL Discussion :

Maximum d'une somme et group by


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 115
    Par défaut Maximum d'une somme et group by
    Bonjour,

    Je me retrouve face à un problème, pour l'illustrer je vais prendre l'exemple d'un système de notation, pour disons, du patinage artistique. Chaque patineur participe à des runs qui sont notés par des jurés. Le run ayant une note "globale" correspondant à la somme des notes qui lui sont associées.

    Considérons le schéma de table suivant :

    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
     
    CREATE TABLE patineurs
    (
    id INTEGER(11) AUTO_INCREMENT,
    nom CHAR(255),
    PRIMARY KEY (id)
    );
     
    CREATE TABLE runs
    (
    id INTEGER(11) AUTO_INCREMENT,
    numero INTEGER(2),
    patineur_id INTEGER(11),
    PRIMARY KEY (id)
    );
     
    CREATE TABLE notes
    (
    id INTEGER(11) AUTO_INCREMENT,
    valeur DECIMAL(3,2),
    run_id INTEGER(11),
    jure_id INTEGER(11),
    PRIMARY KEY (id)
    );
     
    CREATE INDEX run_id_idx  ON notes(run_id);
    CREATE INDEX jure_id_idx  ON notes(jure_id);
    CREATE INDEX patineur_id_idx  ON runs(patineur_id);
    Le but étant d'afficher par patineur, le run le mieux noté (maximum de la somme des notes) et le nombre de notes (pour vérifier que les 10 jurés on voté par ex), ainsi que l'id du meilleur run :

    patineur_id - note totale du meilleur run - nb de notes sur le run - run_id

    J'arrive à afficher les notes par patineur mais je galère à n'afficher que les meilleures notes. J'ai fait des essais avec un GROUP BY patineur.id mais j'ai forcément un résultat imprévisible au niveau de la note du run - à ce sujet j'ai d'ailleurs lu cet excellent tutoriel qui illustre bien les pb relatifs au GROUP BY.

    Merci d'avance pour votre coup de pouce !

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 249
    Par défaut
    Je verrais bien 2 requêtes imbriquées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT t3.patineurID,t3.runID,t3.nbNotes,MAX(t3.note) FROM 
        (SELECT t1.patineur_id AS patineurID,t1.id AS runID,COUNT(t2.id) AS nbNotes,SUM(t2.valeur) AS note 
        FROM runs t1 
        INNER JOIN notes t2 ON t2.run_id=t1.id 
        GROUP BY t1.patineur_id,t1.id) t3
    GROUP BY t3.patineurID,t3.runID,t3.nbNotes

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 115
    Par défaut
    @sevyc64 merci pour ton aide !

    j'essaye et je te tiens au courant !!

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 115
    Par défaut
    @sevyc64

    J'ai adapté ta proposition à mon cas et ça marche !!

    Je suis passé par 2 requêtes imbriquées, une qui me retourne tout les scores et l'autre qui ne prend que les max avec un GROUP BY.

    Merci encore !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/10/2014, 11h55
  2. Réponses: 1
    Dernier message: 13/08/2014, 15h05
  3. Somme des maximum d'une courbe
    Par haraigo dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 06/11/2010, 14h47
  4. Calculer une somme sans le Maximum
    Par Amaury_35 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/08/2009, 14h08
  5. Réponses: 10
    Dernier message: 03/10/2006, 20h19

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