sql >> Database teknologi >  >> RDS >> Mysql

Gælder ORDER BY før eller efter DISTINCT?

To ting at forstå:

  1. Generelt set er resultatsæt uordnet medmindre du angiver en ORDER BY klausul; i det omfang du angiver en ikke-streng rækkefølge (dvs. ORDER BY over ikke-unikke kolonner), er rækkefølgen, som poster, der er ens under den rækkefølge, vises i resultatsættet, udefineret.

    Jeg formoder, at du muligvis angiver en sådan ikke-streng ordre, som er roden til dine problemer:Sørg for, at din ordre er streng ved at angive ORDER BY over et sæt kolonner, der er tilstrækkeligt til entydigt at identificere hver post, som du interesserer dig for dens endelige placering i resultatsættet.

  2. DISTINCT kan bruge GROUP BY , som får resultaterne til at blive sorteret efter de grupperede kolonner; dvs. SELECT DISTINCT a, b, c FROM t vil producere et resultatsæt, der ser ud som om ORDER BY a, b, c er blevet anvendt. Igen, at angive en tilstrækkelig streng rækkefølge til at opfylde dine behov vil tilsidesætte denne effekt.

Efter din opdatering, i betragtning af mit punkt #2 ovenfor, er det klart, at effekten af ​​at gruppere resultaterne for at opnå DISTINCT gør det umuligt derefter at bestille efter den ikke-grupperede kolonne p.id; i stedet ønsker du:

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. psycopg2:indsæt flere rækker med én forespørgsel

  2. Hvad er nyt i MariaDB Cluster 10.4

  3. Sådan bruges LIKE i SQL

  4. Hvad betyder INT(5) i mysql?