sql >> Database >  >> RDS >> Mysql

Geldt ORDER BY voor of na DISTINCT?

Twee dingen om te begrijpen:

  1. Over het algemeen zijn resultatensets ongeordend tenzij u een ORDER BY . opgeeft clausule; voor zover u een niet-strikte bestelling opgeeft (d.w.z. ORDER BY over niet-unieke kolommen), is de volgorde waarin records die onder die volgorde gelijk zijn in de resultatenset verschijnen, niet gedefinieerd.

    Ik vermoed dat je een dergelijke niet-strikte volgorde opgeeft, wat de oorzaak is van je problemen:zorg ervoor dat je bestelling strikt is door ORDER BY op te geven over een reeks kolommen die voldoende is om elk record waarvan u de uiteindelijke positie in de resultatenset belangrijk vindt, op unieke wijze te identificeren.

  2. DISTINCT mag GROUP BY . gebruiken , waardoor de resultaten worden geordend op de gegroepeerde kolommen; dat wil zeggen, SELECT DISTINCT a, b, c FROM t zal een resultatenset produceren die eruitziet alsof ORDER BY a, b, c is aangebracht. Nogmaals, het specificeren van een voldoende strikte volgorde om aan uw behoeften te voldoen, zal dit effect teniet doen.

Na uw update, rekening houdend met mijn punt #2 hierboven, is het duidelijk dat het effect van het groeperen van de resultaten om DISTINCT te bereiken maakt het onmogelijk om vervolgens te bestellen via de niet-gegroepeerde kolom p.id; in plaats daarvan wil je:

SELECT   t.*
FROM     Threads t INNER JOIN Posts p ON t.id = p.threadid
GROUP BY t.id
ORDER BY MAX(p.id) DESC


  1. Hoe installeer ik Haproxy en Keepalive

  2. SQLite selecteren

  3. Hoe Sind() werkt in PostgreSQL

  4. Exporteer SQLite-queryresultaten naar een CSV-bestand