ORDER BY只适用于列吗?

时间:2009-03-08 16:54:32

标签: sql

为什么SELECT * FROM TABLE ORDER BY RAND()有效?我认为ORDER BY仅适用于列。

那么这对ORDER BY RAND()ORDER BY SUM()究竟是什么意思?

4 个答案:

答案 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)

嗯,简而言之:你错了。