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

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

  1. 这并不明显/明确
  2. 如果列顺序发生变化,查询仍然有效,因此您可能会冒按不希望的顺序排序的风险

Sql相关问答推荐

Click house在数组中生成X行Y随机数

如何根据SQL中的列条件获取下一个时间戳?

无效和不匹配的计数

前面的语句不喜欢AND LIKE?当try 更新使用ID和日期过滤的表时

如何根据特定的内部json元素值过滤postgres查询结果?

SQL -滞后于上一个非重复值

为什么TRY_CONVERT返回一个XML验证错误而不是NULL?

SQL:如何取上一年的平均值?

查找表中特定值的上次更新日期

在查询Oracle SQL中创建替代ID

在VB.NET中如何在MS Access数据库中创建SQL项目历史库存卡

此过程如何在不引用传递的参数值的情况下执行工作?

基于开始/结束日期重叠的BigQuery突发行

将时间范围划分为全天和前后剩余小时

不同计数的 Postgres PIVOT 表

删除对 JSON 数据的未解析引用的 SQL71502 警告

查询以查找今天和昨天的数据之间的差异以及伪列

Select 多年的日期范围

SQL 查询以填充单个列中的所有值

如何根据 ID 和指标从 2 个表中找到不同的值?