Partage
  • Partager sur Facebook
  • Partager sur Twitter

Requête pour un leaderboard

Sujet résolu
    5 mai 2021 à 22:21:08

    Bonjour,

    cela fait quelque jours que j'essaye de trier une base de donnée en enlevant les doublon des pseudo et en mettant en face des pseudo leurs meilleur score (avec en plus le Rank a coté)

    par exemple , si ma base est construit comme ca :

    le résultat doit être comme ca :

    Le problème ici est que le score max de logan dans ma base de donnée est de 10, cependant dans le résultat du tableau le score afficher est 5

    ma requête actuelle est celle la :

    SELECT name, score, RANK() OVER (ORDER BY CAST(score AS SIGNED) DESC) AS globalRank FROM ( SELECT name, MAX(score) AS score FROM scores GROUP BY name) AS scores ORDER BY CAST(score AS SIGNED) DESC;

    (le nom de ma base est : scores. Et je n'ai qu'un tableau avec deux colonne nommé 'name' et 'score' )

    Donc si vous avez une idée qui pourrait me faire avancé je suis pas contre

    Merci par avance de vos réponse

    Amaury

    -
    Edité par AmauryChabert 5 mai 2021 à 22:24:01

    • Partager sur Facebook
    • Partager sur Twitter
      6 mai 2021 à 8:26:37

      Bonjour AmauryChabert

      Pour supprimer les doublons dans un SELECT SQL tu peux utiliser DISTINCT ta requète s'écrirai donc:

      SELECT DISTINCT name, score, RANK() OVER (ORDER BY CAST(score AS SIGNED) DESC) AS globalRank FROM ( SELECT name, MAX(score) AS score FROM scores GROUP BY name) AS scores ORDER BY CAST(score AS SIGNED) DESC;



      • Partager sur Facebook
      • Partager sur Twitter
        6 mai 2021 à 8:35:28

        EloiSchneider a écrit:

        Bonjour AmauryChabert

        Pour supprimer les doublons dans un SELECT SQL tu peux utiliser DISTINCT ta requète s'écrirai donc:

        SELECT DISTINCT name, score, RANK() OVER (ORDER BY CAST(score AS SIGNED) DESC) AS globalRank FROM ( SELECT name, MAX(score) AS score FROM scores GROUP BY name) AS scores ORDER BY CAST(score AS SIGNED) DESC;



        Merci mais la requête ne règle toujours pas le bug lié au score
        • Partager sur Facebook
        • Partager sur Twitter
          6 mai 2021 à 8:47:41

          Je pense que tu dois avoir une erreur quelque part car j'ai fait le test et je reçois effectivement 10 pour le score de logan !

          J'ai en table :

          donc tout comme toi il me semble et avec ma requête il me renvoie:

          donc normalement cela devrait fonctionner (pour info j'ai utilisé cette requête:)

          SELECT DISTINCT name, score, RANK() OVER (ORDER BY CAST(score AS SIGNED) DESC) AS globalRank FROM ( SELECT name, MAX(score) AS score FROM scores GROUP BY name) AS scores ORDER BY CAST(score AS SIGNED) DESC; 



          -
          Edité par Ma-nie 6 mai 2021 à 8:49:17

          • Partager sur Facebook
          • Partager sur Twitter
            6 mai 2021 à 9:22:23

            merci EloiSchneider, je ne sais pas d'où viens mon problème mais pas grave j'arriverais surement a trouver une solution

            • Partager sur Facebook
            • Partager sur Twitter
              6 mai 2021 à 9:40:33

              Bonjour,

              Je ferai plus simple :

              SELECT
              	name,
              	MAX( CAST( score AS SIGNED ) ) AS score,
              	RANK() OVER ( ORDER BY MAX( CAST( score AS SIGNED ) ) DESC ) AS globalRank
              FROM scores
              GROUP BY name
              ORDER BY score DESC;
              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

              Requête pour un leaderboard

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown