我正在阅读工作中的一些旧代码,并注意到有几个视图具有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;

当前回答

这样的:

ORDER BY 1

...称为“序数”——该数字表示基于SELECT子句中定义的列数的列。在您提供的查询中,它的意思是:

ORDER BY A.PAYMENT_DATE

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

这并不明显 如果列顺序发生变化,则查询仍然有效,因此您可能会按照意想不到的顺序进行排序

其他回答

我相信在Oracle中,这意味着按列#1排序

ORDER BY 1表示按结果集的第一列排序

这将根据返回的第一列对结果进行排序。在本例中,它将根据payment_date排序。

正如在其他答案中提到的,ORDER BY 1按第一列排序。

我遇到了另一个你可能会用到它的例子。我们有某些查询,需要排序选择相同的列。如果在下面按名称排序,将会得到一个SQL错误。

SELECT Name, Name FROM Segment ORDER BY 1

它只是指根据查询结果的第一列对视图或表进行排序。