gpt4 book ai didi

MySQL ORDER BY 随机字段不适用于附加操作

转载 作者:可可西里 更新时间:2023-11-01 06:49:50 30 4
gpt4 key购买 nike

我遇到了 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 :

You cannot use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times.

RAND() 每次被调用时都会被评估,即使您将其别名为 r 它也会被重新评估并且不具有与专栏。

如果你想ORDER BY r+1你需要一个子查询:

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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com