Maison  >  Questions et réponses  >  le corps du texte

Sélectionnez la bonne ligne de base de données pour obtenir des résultats groupés

Je souhaite sélectionner le meilleur score pour chaque utilisateur pour un jeu spécifique.

Ma requête actuelle sélectionne le score, la date_saved et le nom d'utilisateur du résultat pour skills_game avec l'identifiant 1.

SELECT MAX(score) as score, date_saved, users.username FROM results
INNER JOIN users_results ON results.id = users_results.result_id
INNER JOIN users ON users_results.user_id = users.id
WHERE skill_game_id = 1
GROUP BY user_id
ORDER BY score  DESC

Les résultats sont les suivants :

| score | username | date_saved |
---------------------------------
|    73 |     Mark | 2021-09-06 |
|    51 |     John | 2018-08-16 |
|    46 |     Ryan | 2020-02-20 |
|    43 |    Chris | 2019-08-27 |
|    40 |   Steven | 2020-07-04 |

Actuellement, date_saved n'est pas toujours correct, car le résultat de 73 points de Mark a en fait été enregistré le 03/11/2021. Voici les résultats de Mark :

| score | username | date_saved |
---------------------------------
|    73 |     Mark | 2021-11-03 |
|    35 |     Mark | 2021-10-29 |
|    24 |     Mark | 2021-09-06 |

L'instruction GROUP BY sélectionne la première ligne du groupe et MAX(score) sélectionne le score le plus élevé du groupe. Je veux pouvoir sélectionner le score le plus élevé et sélectionner la date correspondante, mais je ne sais pas comment y parvenir dans MySQL.

P粉270842688P粉270842688219 Il y a quelques jours482

répondre à tous(1)je répondrai

  • P粉964682904

    P粉9646829042024-04-06 00:37:46

    Vous pouvez également le faire en sélectionnant la plus grande date_saved

    SELECT MAX(score) as score, MAX(date_saved), users.username FROM results
    INNER JOIN users_results ON results.id = users_results.result_id
    INNER JOIN users ON users_results.user_id = users.id
    WHERE skill_game_id = 1
    GROUP BY user_id
    ORDER BY score  DESC

    répondre
    0
  • Annulerrépondre