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

ORDER BY si applica prima o dopo DISTINCT?

Due cose da capire:

  1. In generale, i set di risultati sono non ordinati a meno che non specifichi un ORDER BY clausola; nella misura in cui specifichi un ordine non rigoroso (es. ORDER BY su colonne non univoche), l'ordine in cui i record che sono uguali in quell'ordine vengono visualizzati all'interno del set di risultati non è definito.

    Sospetto che tu stia specificando un ordine così non rigoroso, che è la radice dei tuoi problemi:assicurati che il tuo ordine sia rigoroso specificando ORDER BY su un insieme di colonne sufficiente per identificare in modo univoco ogni record per il quale tieni alla sua posizione finale nel set di risultati.

  2. DISTINCT può utilizzare GROUP BY , che fa in modo che i risultati vengano ordinati in base alle colonne raggruppate; ovvero SELECT DISTINCT a, b, c FROM t produrrà un set di risultati che appare come se ORDER BY a, b, c è stato applicato. Anche in questo caso, specificare un ordine sufficientemente rigoroso per soddisfare le tue esigenze annullerà questo effetto.

A seguito del tuo aggiornamento, tenendo presente il mio punto n. 2 sopra, è chiaro che l'effetto del raggruppamento dei risultati per ottenere DISTINCT rende impossibile quindi ordinare per colonna non raggruppata p.id; invece, vuoi:

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