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 :

[Access] SUM, MAX et Tri selon 3 critères


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 314
    Par défaut [Access] SUM, MAX et Tri selon 3 critères
    Bonjour,
    Sous VB6, base Access

    Je doit faire pour mon club de tir un prog pour le classement d'un concours.

    J'ai comme données : 5 coups (1 coup peut prendre une valeur de 0 à 100) et l'age du compétiteur.
    Le classement se fait à l'addition des 5 coups.

    Jusque là pas de prob.

    Cela se corse en cas d'égalité. Dans ce cas le règlement dit "appui par les meilleurs coups, puis par l'age" Ce qui veut dit que en cas d'égalité totale c'est l'age qui fait foi (le plus âgé passe devant).
    Exemple appui meilleurs coups
    Tireur 1 : 88 90 96 91 85 = 450
    Tireur 2 : 84 91 98 87 90 = 450
    Le tireur 2 passe devant grâce à son coup de 98
    Est il possible de faire ce classement avec une requête SQL ? Si oui comment
    Merci d’avance

    Fikou

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Je ne connais pas bien access, et même pas les termes spécifiques... mais pour le principde de la même maniére que tu à un champ Total (somme des coups,) tu pourrai ajouter un champ Meilleur coup (max des coups) et un champ age... pour chacun des enregistrement puis tu utilise ces 3 colonnes pour le tri..

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 314
    Par défaut
    Salut,

    Il est vrai que j'aurai du mettre les champs de mes tables.

    Table Tireurs :
    Nom, Prenom, IdTireur, DateNaiss
    Table Resultat
    IdTireur, cp1, cp2, cp3, cp4, cp5
    Je ne pensai pas mettre le total car on l'obtient dans le code.

    Fikou

  4. #4
    Xo
    Xo est déconnecté
    Membre Expert
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Par défaut
    Voici une requête en tenant compte du 1° et 3° critères de tri (total et âge)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Nom, Prenom, (cp1+cp2+cp3+cp4+cp5) AS Total, DateNaiss
      FROM Tireur T INNER JOIN Resultat R ON T.idTireur = R.idTireur
    ORDER BY (cp1+cp2+cp3+cp4+cp5) DESC, DateNaiss ASC
    Au niveau de la conception, tu aurais mieux fait de gérer les valeurs des scores dans une table fille, il n'est jamais bon de répéter une même colonne X fois au sein d'une même table. La preuve en est que pour mettre en place ton 2° critère de tri, tu dois faire un MAX sur 5 colonnes différentes, ce qui me paraît relativement compliqué ...
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 314
    Par défaut
    Salut et merci Xo,

    En fait si j'ai posté c'est que je ne savais absolument pas comment m'y prendre (en fait je n'ai pas encore créé la table, donc tous est possible).

    Au niveau de la conception, tu aurais mieux fait de gérer les valeurs des scores dans une table fille
    Je pige pas

    L'age entre en compte uniquement si l'égalité est totale (les 5 coups identiques)

    Fikou

  6. #6
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    Ce que veut dire Xo, et que j'approuve, c'est qu'avec un schéma du genre
    Table Tireurs : Nom, Prenom, IdTireur, DateNaiss
    Table Resultat : IdTireur, NCoup, ValeurCoup

    tu pourrais résoudre facilement ton problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT t.Nom, t.Prenom, SUM(r.ValeurCoup) AS Total, MAX( r.ValeurCoup) AS Maximum, t.DateNaiss
    FROM Tireur t INNER JOIN Resultat r ON t.IdTireur = r.IdTireur
    GROUP BY t.Nom, t.Prenom, t.DateNaiss, t.IdTireur
    ORDER BY Total DESC, Maximum DESC, DateNaiss ASC
    Si ACCESS le permet tu peux utiliser un NATURAL JOIN ou encore USING pour la jointure.

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/03/2006, 08h58
  2. Réponses: 5
    Dernier message: 24/02/2006, 10h12
  3. tri selon le nombre d'enregistrement
    Par bugbug dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/12/2005, 13h57
  4. Accession aux std::map triées ?
    Par Matthieu Brucher dans le forum SL & STL
    Réponses: 5
    Dernier message: 18/11/2005, 14h44
  5. Tri selon formule dans modification d'un état...
    Par JeremieT dans le forum Access
    Réponses: 3
    Dernier message: 26/09/2005, 13h36

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