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 :

Classement sur deux critères


Sujet :

Langage SQL

  1. #1
    Membre confirmé
    Avatar de mathieugut
    Profil pro
    Webmaster
    Inscrit en
    Mars 2008
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2008
    Messages : 225
    Points : 476
    Points
    476
    Par défaut Classement sur deux critères
    Bonjour à tous,

    Voilà je suis pas très expérimenté en SQL et je confronté à un petit problème de compréhension.

    Je travaille sous MySql.

    J'ai une table ratings qui contient un identifiant (id), le nombre de votant(votes) et la note cumulée(note).

    Lors du vote la note est sur 5.

    Par exemple j'ai :
    1 | 2 | 8 -> Note de 4 (8/2)
    2 | 5 | 24 -> Note de 4.8 (24/5)
    ...

    Pour obtenir la note je divise donc la note par le nombre de votant.

    Voilà j'aimerai établir un classement des images les mieux notées, hors pour le moment j'ai juste fait une requête simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT id,(note/votes) AS resultat FROM `ratings` ORDER BY resultat
    Le problème c'est que si par exemple, une image a un seul votant et une note de 5 bien elle se retrouve parmis les premières contrairement a une image qui va elle avoir 17 votes mais une note de 4.77...

    J'aimerai donc établir un classement qui soit concret et qui prenne en paramètre le nombre de votant et la note.

    J'espère avoir été clair.

    Merci de l'aide que vous pourrez m'apporter

    Cordialement, Mathieu.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    J'imagine que vous ne voulez pas trier par nombre de votants ?

    Définissez bien votre tri, c'est une composante de la requête aussi importante que le reste.

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 76
    Points : 81
    Points
    81
    Par défaut
    C'est plus un problème de présentation des données que de SQL.
    Voici ce que j'utilise dans mon cas pour effectuer un classement des items les mieux notés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT id,(note/votes) AS resultat 
    FROM `ratings`
    WHERE  votes>X
    ORDER BY resultat
    ou X est un nombre de votant minimal.

  4. #4
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Avec le WHERE, tu as il me semble résolu le problème posé à l'origine non ?

    Par contre ton ORDER BY va mettre la moins bonne moyenne en premier ! Il manque DESC pour mettre le mieux noté en premier :

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Ce n'est pas la même personne

  6. #6
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Comme dit Waldar, il faut savoir ce que tu veux comme règle de tri.
    17 votes, note 4,77 est mieux que 1 vote note 5.
    Et 17 votes, note 4,77 contre 5 votes note 4,98 ?

    En prenant la bonne règle, tu peux définir un système de pondération.
    Par exemple, tu as ce genre de système dans l'évaluation de l'ELO (le classement du jeu d'échecs).

    Suppose par exemple que tu pars de la moyenne 2,5 et que chaque votant apporte un modificateur. Tu peux alors par exemple définir un seuil pour la pondération (disons 20).

    Note pondérée = 2,5 + moyenne(modificateurs) * alpha
    si nb votes < seuil
    alpha = nb votes / seuil
    sinon
    alpha = 1
    Le modificateur est algébrique et vaut note - 2,5
    Du coup (pour simplifier je passe ton exemple de 17 à 20) :
    20 votes, 4,77 de moyenne => 4,77
    10 votes, 4,9 de moyenne => 2,5 + 2,4 * 10/20 = 3,7

    Bon, tu peux aussi imaginer une méthode sans seuil.
    Dans ce cas, il faut que tu trouves un fonction de n strictement croissante et comprise entre 0 et 1.
    Le problème alors est d'en trouver une avec une "dérivée satisfaisante"...

  7. #7
    Membre confirmé
    Avatar de mathieugut
    Profil pro
    Webmaster
    Inscrit en
    Mars 2008
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2008
    Messages : 225
    Points : 476
    Points
    476
    Par défaut
    Merci pour vos réponses

    J'ai mélangé un peu toutes vos idées et je suis arrivé à un résultat satisfaisant pour mon cas =)

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

Discussions similaires

  1. Filtre sur deux critères Hfiltre
    Par reamgm dans le forum WinDev
    Réponses: 10
    Dernier message: 28/05/2013, 02h46
  2. Tri sur deux critères
    Par Flo4594 dans le forum Access
    Réponses: 2
    Dernier message: 22/12/2006, 15h55
  3. Afficher un résultat sur deux critères du même champ
    Par julien6660 dans le forum Access
    Réponses: 2
    Dernier message: 20/04/2006, 12h30
  4. Sélection sur deux critères
    Par Hbenne dans le forum Access
    Réponses: 2
    Dernier message: 07/04/2006, 17h18
  5. concaténation sur deux critères
    Par stéphane_ais2 dans le forum Access
    Réponses: 7
    Dernier message: 29/11/2005, 10h37

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