sql >> Database >  >> RDS >> Mysql

Hoe te groeperen op DESC-bestelling

Als je de laatste id . wilt voor elke asker , dan moet u een aggregatiefunctie gebruiken:

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

De reden waarom u het ongebruikelijke resultaat kreeg, is omdat MySQL een extensie gebruikt voor GROUP BY waarmee items in een selecte lijst niet-geaggregeerd kunnen worden en niet kunnen worden opgenomen in de GROUP BY-clausule. Dit kan echter tot onverwachte resultaten leiden omdat MySQL de waarden kan kiezen die worden geretourneerd. (Zie MySQL-extensies voor GROUP BY )

Uit de MySQL-documenten:

Als u nu andere kolommen had die u uit de tabel moet halen, maar deze niet wilt toevoegen aan de GROUP BY vanwege de inconsistente resultaten die u zou kunnen krijgen, kunt u hiervoor een subquery gebruiken. (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. MySQL-query om meerdere attributen en value_id te zoeken

  2. VERWIJDEREN VS DROP in SQL

  3. COUNT CASE en WHEN-instructie in MySQL

  4. MAAK TABEL MySQL versus T-SQL met syntaxisvoorbeelden