当我执行PARTITION BY时,ORDER BY对什么有用



我开始学习带有agregate函数的PARTITION BY方法,但我不明白为什么要在这个查询中使用ORDER BY for。我想把每年"标准纸"的销售额加起来,以美元为单位这是我的代码:

SELECT standard_amt_usd,
DATE_TRUNC('year', occurred_at) as year,
SUM(standard_amt_usd) OVER (PARTITION BY DATE_TRUNC('year', occurred_at) 
ORDER BY occurred_at) AS running_total
FROM orders ; 

我得到的答案是正确的,但我仍然不明白为什么需要在这里使用ORDER BY,如果我不使用它会发生什么?感谢您的帮助:(

运行此查询:

SELECT standard_amt_usd,
DATE_TRUNC('year', occurred_at) as year,
SUM(standard_amt_usd) OVER (PARTITION BY DATE_TRUNC('year', occurred_at) 
ORDER BY occurred_at
) AS running_total,
SUM(standard_amt_usd) OVER (PARTITION BY DATE_TRUNC('year', occurred_at) 
) AS group_total
FROM orders ; 

你可能会马上看到区别。ORDER BY表示求和"直到"这一行。如果没有ORDER BY,则具有相同PARTITION BY关键字的所有行的总和都是相同的。

ORDER BY主要有两个规则:
  1. 实际定义另一个功能的工作方式。当例如,使用TOP,或者在OVER((分区函数中使用。它没有需要进行排序,它只是说"这个定义只会如果我们认为结果集中的行出现在特殊订单-这是我要使用的订单">
  2. 指定结果集的排序顺序。这是真的最外层语句上的ORDER BY子句,该语句是特定查询-不在子查询、CTE、OVER((分区中功能等

最新更新