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

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 311
    Points : 96
    Points
    96
    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 sénior


    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
    Points : 20 038
    Points
    20 038
    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 régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 311
    Points : 96
    Points
    96
    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é
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    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 régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 311
    Points : 96
    Points
    96
    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
    Points : 2 227
    Points
    2 227
    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.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 311
    Points : 96
    Points
    96
    Par défaut
    Oui bien sur
    J'ai déja une table tireurs, un tireur peut tirer plusieurs cibles (j'ai pris la cible ou il a le moins de coups pour ce post).

    Donc la table Cible1 ressemble à ça :
    IdTireur, cp1, cp2, cp3, cp4, cp5, Total
    Je n'ai malheureusement pas le temps de tester maintenant je dois m'absenter mais je reviens promis

    Fikou

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 311
    Points : 96
    Points
    96
    Par défaut
    Bonjour,

    Je ne comprend pas bien le SUM.

    En cas d'égalité c'est le coup le plus haut qui prime.

    SUM additionne un même champ de toute la table. Ce que j'aimerai c'est définir le coup le plus haut de l'enregistrement.

    Fikou

  9. #9
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    ben SUM c'est dans le cas ou la table est organisé autrement.., voir la réponse de Médiat, mais celui-ci à ommis de prendre en compte NCoup qui permet de regrouper les 5 tirs .. d'un participant..

  10. #10
    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
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par bbil
    ben SUM c'est dans le cas ou la table est organisé autrement.., voir la réponse de Médiat, mais celui-ci à ommis de prendre en compte NCoup qui permet de regrouper les 5 tirs .. d'un participant..
    Je ne pense pas avoir omis NCoup qui est le N° de coup (nécessaire pour avoir une clé unique) et qui me semble inutile pour le calcul de la SUM aussi bien que pour le calcul du MAX
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 311
    Points : 96
    Points
    96
    Par défaut
    Bonjour et merci,

    D'après la doc que je possède SUM additionne une colonne.

    Moi j'ai besoin de faire une comparaison dans une ligne (enregistrement).

    Je tri déja en ordre décroissant à la saisie (Id, 98, 91, 90, 88, 87, Total)

    Fikou

  12. #12
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par fikou
    Bonjour et merci,

    D'après la doc que je possède SUM additionne une colonne.

    Moi j'ai besoin de faire une comparaison dans une ligne (enregistrement).

    Je tri déja en ordre décroissant à la saisie (Id, 98, 91, 90, 88, 87, Total)

    Fikou
    oui .. mais justement ce que l'on t'as demandé de faire c'est de mettre tous les "tirs" dans la même colonne...

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