为什么SELECT * FROM TABLE ORDER BY RAND()
有效?我认为ORDER BY
仅适用于列。
那么这对ORDER BY RAND()
或ORDER BY SUM()
究竟是什么意思?
答案 0 :(得分:10)
您几乎可以订购所有,功能(,如RAND()),聚合(,如SUM())等等。
例如,MySQL-Documentation表示为语法:
[ORDER BY {col_name | expr | position}
或者Postgresql Documentation更加明确:
可选的 ORDER BY 子句具有以下一般形式:
ORDER BY expression [ ASC | DESC | USING operator ] [, ...]
表达式可以是输出列(SELECT列表项)的名称或序号,,也可以是由输入列值组成的任意表达式。
关于你的第二个问题:
ORDER BY RAND()
或ORDER BY RANDOM()
执行以下操作:您的行已被拆分,您可以按随机顺序获取这些行。因此,如果您执行SELECT * FROM ... ORDER BY RAND() LIMIT 1
,则从表中选择一个(= 1)随机行。ORDER BY SUM(Column)
仅与GROUP BY
语句结合才有意义。 答案 1 :(得分:3)
ORDER
将使用您可以在结果中添加的任何值(但不一定是结果中的值之一)。这可以是任何源表中的列,也可以使用函数计算。例如,您可以使用ORDER UPPER(name)
进行不区分大小写的排序。
如果您ORDER BY RAND()
按照为结果中的每一行生成的随机数进行排序,即以随机顺序返回行。如果您在SUM()
之前订购,那么您可能也会在GROUP BY
订购,例如,您可以按总计算发票总额订购客户。
理想情况下,您希望使用索引中的列,因为这样会更快。
答案 2 :(得分:0)
实际上它取决于实现。您提到的语句不是SQL92兼容的,但它可能被实现所接受。
答案 3 :(得分:-4)
嗯,简而言之:你错了。