J'ai une table logins
avec le schéma suivant:MySQL - Obtenez le nombre maximum d'un groupe de sous-requête
| id | user_id | weekday |
|----|---------|---------|
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 2 |
...
Weekday est un nombre de 0 à 6.
Je veux que weekday
a le nombre le plus élevé, pour chaque user_id
dans le tableau.
J'ai essayé la requête suivante:
SELECT MAX(num) as max_num, user_id, weekday
FROM (
SELECT COUNT(*) as num, user_id, weekday
FROM logins
GROUP BY user_id, weekday
) C
WHERE user_id = C.user_id AND num = C.num
GROUP BY user_id;
Ce qui me fait weekday = 1
au lieu de 2
. Je pense que je ne devrais pas utiliser une clause WHERE
ici, mais je n'ai pas réussi à obtenir le bon résultat.
J'ai vérifié d'autres questions semblables sans chance, tels que:
J'ai créé un Fiddle SQL avec mon exemple: http://sqlfiddle.com/#!9/e43a71/1
Notez que 'count (*)' peut ne pas toujours parfaitement dans InnoDB en raison d'un bug qui est tout à l'heure fixée dans MySQL 5.7.19. J'ai eu ce problème plus tôt. Semble fonctionner correctement après la mise à niveau vers la version 5.7.19. https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-19.html –
@Marc. . . Tu préfères vraiment l'autre réponse à celle-ci? –