Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment regrouper par ordre DESC

Si vous voulez le dernier id pour chaque asker , alors vous devez utiliser une fonction d'agrégation :

SELECT max(id) as id, 
   asker
FROM questions 
GROUP by asker 
ORDER by id DESC

La raison pour laquelle vous obteniez le résultat inhabituel est que MySQL utilise une extension pour GROUP BY qui permet aux éléments d'une liste de sélection d'être non agrégés et non inclus dans la clause GROUP BY. Cela peut cependant conduire à des résultats inattendus car MySQL peut choisir les valeurs renvoyées. (Voir Extensions MySQL pour GROUP BY )

À partir de la documentation MySQL :

Maintenant, si vous avez d'autres colonnes que vous devez renvoyer à partir de la table, mais que vous ne voulez pas les ajouter au GROUP BY en raison des résultats incohérents que vous pourriez obtenir, vous pouvez utiliser une sous-requête pour le faire. (Démo )

select 
  q.Id,
  q.asker,
  q.other -- add other columns here
from questions q
inner join
(
  -- get your values from the group by
  SELECT max(id) as id, 
    asker
  FROM questions 
  GROUP by asker 
) m
  on q.id = m.id
order by q.id desc