sql >> Databasteknik >  >> RDS >> Mysql

Hur man grupperar efter DESC-ordning

Om du vill ha det sista id för varje asker , då bör du använda en aggregatfunktion:

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

Anledningen till att du fick det ovanliga resultatet är att MySQL använder ett tillägg till GROUP BY som tillåter att objekt i en urvalslista inte är aggregerade och inte inkluderas i GROUP BY-satsen. Detta kan dock leda till oväntade resultat eftersom MySQL kan välja de värden som returneras. (Se MySQL-tillägg till GROUP BY )

Från MySQL Docs:

Om du nu hade andra kolumner som du behöver returnera från tabellen, men inte vill lägga till dem i GROUP BY på grund av de inkonsekventa resultaten som du kan få, kan du använda en underfråga för att göra det. (Demo )

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


  1. Xampp MySQL startar inte - Försöker starta MySQL-tjänsten...

  2. SQL ELLER Operator för nybörjare

  3. Ladda om .env-variabler utan att starta om servern (Laravel 5, delad värd)

  4. Hur man åtgärdar felaktigt strängvärde i MySQL