sql >> Databáze >  >> RDS >> Mysql

Jak seskupit podle objednávky DESC

Pokud chcete poslední id pro každého asker , pak byste měli použít agregační funkci:

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

Důvodem, proč jste získali neobvyklý výsledek, je to, že MySQL používá rozšíření GROUP BY což umožňuje, aby položky ve výběrovém seznamu nebyly agregované a nebyly zahrnuty do klauzule GROUP BY. To však může vést k neočekávaným výsledkům, protože MySQL si může vybrat hodnoty, které se vrátí. (Viz Rozšíření MySQL pro GROUP BY )

Z dokumentů MySQL:

Nyní, pokud máte další sloupce, které potřebujete vrátit z tabulky, ale nechcete je přidávat do GROUP BY kvůli nekonzistentním výsledkům, které byste mohli získat, byste k tomu mohli použít poddotaz. (Ukázka )

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. Více sloupců Pivot v T-SQL

  2. php/mysql. Existuje funkce mysql ke zjištění, zda existují alespoň 2 určitá slova v alespoň jednom poli řádku mysql

  3. Pole vstupního formuláře HTML nevyplňuje hodnotu PHP za první mezerou

  4. Jak nastavit replikaci MySQL v RHEL, Rocky a AlmaLinux