当我执行 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主要有两条规则:
- 实际定义另一个功能的工作原理。这是真的,当
例如,使用 TOP,或在 OVER() 分区函数中。它没有
要求排序发生,它只是说“这个定义只
如果我们认为结果集中的行出现在
特定顺序 - 这是我要使用的那个
- 决定结果集的排序顺序。这是真的,当它是
最外层语句上的 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
键的所有行的总和相同。
我开始学习使用聚合函数的 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主要有两条规则:
- 实际定义另一个功能的工作原理。这是真的,当 例如,使用 TOP,或在 OVER() 分区函数中。它没有 要求排序发生,它只是说“这个定义只 如果我们认为结果集中的行出现在 特定顺序 - 这是我要使用的那个
- 决定结果集的排序顺序。这是真的,当它是 最外层语句上的 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
键的所有行的总和相同。