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

what is ORDER BY useful for when i do PARTITION BY

我开始学习使用聚合函数的 PARTITION BY 方法,但我不明白为什么要在此查询中使用 ORDER BY。 我想对 "standart paper " 每年的总销售额求和(以 $ 为单位) 这是我的代码:

    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,如果我不使用它会怎样? 感谢您的帮助:)

ORDER BY主要有两条规则:

  1. 实际定义另一个功能的工作原理。这是真的,当 例如,使用 TOP,或在 OVER() 分区函数中。它没有 要求排序发生,它只是说“这个定义只 如果我们认为结果集中的行出现在 特定顺序 - 这是我要使用的那个
  2. 决定结果集的排序顺序。这是真的,当它是 最外层语句上的 ORDER BY 子句是 特定查询 - 不在子查询、CTE、OVER() 分区中 功能等

运行 这个查询:

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 表示对这一行求和 "up to"。如果没有 ORDER BY,具有相同 PARTITION BY 键的所有行的总和相同。