我面对MySQL的奇怪行为。当我选择一个在计算中使用RAND()的字段并按此字段对结果进行排序时,一切工作正常:

SELECT
RAND() AS r
FROM SomeTable
ORDER BY r DESC;

但是,如果我在ORDER BY子句中执行其他操作,例如+,-,*。/或任何您喜欢的常量或其他字段,结果将不再排序。例如:
SELECT
RAND() AS r
FROM SomeTable
ORDER BY r+1 DESC;

当然,我可以将操作移到另一个字段,但是我很好奇自己是否做错了什么。我假设由于某种未知的原因,如果在ORDER BY子句中执行了某些操作,MySQL将重新评估该字段。

这是正确的假设吗???

最佳答案

MySQL 5.0 Reference:



每次调用RAND()时都会对r进行评估,即使您将其别名为ORDER BY r+1也会对其进行重新评估并且其值与列不相同。

如果要ojit_code,则需要一个子查询:

SELECT *
FROM (SELECT col1, RAND() AS r
      FROM Table1
      ) sub
ORDER BY (r+1) DESC;

关于MySQL ORDER BY随机字段不适用于其他操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31920163/

10-15 21:05