Comment grouper par ordre DESC
J'ai le tableau suivant appelé questions:
ID | asker
1 | Bob
2 | Bob
3 | Marley
Je veux sélectionner chaque personne qu'une seule fois et si il y a plusieurs askers avec le même nom, sélectionnez l'un des plus élevés de l'id. Ainsi, les résultats attendus:
ID | asker
3 | Marley
2 | Bob
- Je utiliser la requête suivante:
SELECT * FROM questions GROUP by questions.asker ORDER by questions.id DESC
J'obtiens le résultat suivant:
ID | asker
3 | Marley
1 | Bob
De sorte qu'il sélectionne le premier 'Bob' il rencontre au lieu de la dernière.
Grâce
source d'informationauteur Michael Samuel
Vous devez vous connecter pour publier un commentaire.
Si vous voulez la dernière
id
pour chaqueasker
alors vous devriez utiliser une fonction d'agrégation:La raison pour laquelle vous avez été d'obtenir le résultat inhabituel est parce que MySQL utilise une extension de
GROUP BY
qui permet à des articles dans une liste de sélection pour être nonaggregated et ne sont pas inclus dans la clause GROUP BY. Toutefois, cela peut conduire à des résultats inattendus parce que MySQL peut choisir les valeurs qui sont retournées. (Voir Extensions MySQL de GROUPE PAR)À partir de la base de données MySQL Docs:
Normalement MySQL permet de groupe par ordre croissant uniquement sur les dossiers. Afin que nous puissions commander les documents avant le regroupement.
Les enregistrements doivent être regroupés à l'aide de
GROUP BY
etMAX()
pour obtenir le maximum de code de chaqueasker
.SORTIE
Les autres sont correctes au sujet de l'aide de MAX(ID) pour obtenir les résultats que vous voulez. Si vous vous demandez pourquoi votre requête ne fonctionne pas, c'est parce que
ORDER BY
arrive après laGROUP BY
.Profiter de chaque colonne:
Version améliorée de la réponse de @bluefeet.