SQL select语句中Order by 1的目的是什么?

ech*_*cho 139 sql sql-order-by

我正在阅读工作中的一些旧代码,并注意到有几个带有order by 1子句的视图.这取得了什么成果?

例:

Create view v_payment_summary AS
SELECT A.PAYMENT_DATE,
       (SELECT SUM(paymentamount)
          FROM payment B
         WHERE PAYMENT_DATE = B.PAYMENT_DATE
           and SOME CONDITION) AS SUM_X,
       (SELECT SUM(paymentamount)
          FROM payment B
         WHERE PAYMENT_DATE = B.PAYMENT_DATE
           and SOME OTHER CONDITION) AS SUM_Y    
FROM payment A    
ORDER BY 1;
Run Code Online (Sandbox Code Playgroud)

OMG*_*ies 180

这个:

ORDER BY 1
Run Code Online (Sandbox Code Playgroud)

...被称为"序数" - 该数字代表基于SELECT子句中定义的列数的列.在您提供的查询中,它表示:

ORDER BY A.PAYMENT_DATE
Run Code Online (Sandbox Code Playgroud)

这不是推荐的做法,因为:

  1. 这不是显而易见的
  2. 如果列顺序发生更改,则查询仍然有效,因此您可能会冒险按照您不想要的方式进行排序

  • 我的问题是询问使用序号是否有好处:http://stackoverflow.com/questions/2253040/benefits-of-using-sql-ordinal-position-notation (2认同)

dav*_*n11 37

当您使用基于集合的运算符(例如union)时,这很有用

select cola
  from tablea
union
select colb
  from tableb
order by 1;
Run Code Online (Sandbox Code Playgroud)

  • 啊哈,这很有道理.这是我到目前为止看到的第一个很好的理由. (4认同)
  • @Lazer我不相信,为了执行一个联盟,它可能在内部进行排序,但这是一个实现问题而不是逻辑输出问题,并且在SQL的精神中,不需要按顺序输出行.如果你想降序排序怎么办?然后你回到原来的问题. (4认同)
  • 仍然...我宁愿使用`order by tablea.cola` (2认同)
  • @ShaharShokrani 那是行不通的。但你可以说,我更喜欢 select cola as x from tablea union select colb as x from tableb order by x; (2认同)

Chr*_*oph 7

我相信Oracle它意味着按列#1排序


小智 6

这将按返回的第一列对结果进行排序.在示例中,它将按payment_date排序.


小智 5

它只是意味着通过第一列查询结果对视图或表进行排序.