Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

O ORDER BY se aplica antes ou depois de DISTINCT?


Duas coisas para entender:

  1. De um modo geral, os conjuntos de resultados são não ordenados a menos que você especifique um ORDER BY cláusula; na medida em que você especificar um pedido não restrito (ou seja, ORDER BY em colunas não exclusivas), a ordem na qual os registros que são iguais sob essa ordenação aparecem no conjunto de resultados é indefinida.

    Suspeito que você esteja especificando uma ordem não restrita, que é a raiz de seus problemas:certifique-se de que sua ordem seja rigorosa especificando ORDER BY sobre um conjunto de colunas que é suficiente para identificar exclusivamente cada registro para o qual você se importa com sua posição final no conjunto de resultados.

  2. DISTINCT pode usar GROUP BY , que faz com que os resultados sejam ordenados pelas colunas agrupadas; isto é, SELECT DISTINCT a, b, c FROM t irá produzir um conjunto de resultados que aparece como se ORDER BY a, b, c foi aplicado. Novamente, especificar uma ordem suficientemente estrita para atender às suas necessidades anulará esse efeito.

Após sua atualização, tendo em mente meu ponto 2 acima, fica claro que o efeito de agrupar os resultados para alcançar DISTINCT torna impossível ordenar pela coluna não agrupada p.id; em vez disso, você deseja:
SELECT   t.*
FROM     Threads t INNER JOIN Posts p ON t.id = p.threadid
GROUP BY t.id
ORDER BY MAX(p.id) DESC