为什么 sum() window 函数需要 order by,当它有 "between unbounded preceding and unbounded following" 时?

Why does the sum() window function require order by, when it has "between unbounded preceding and unbounded following"?

我今天在尝试类似

的时候遇到了一个错误
sum(balance) over(rows between unbounded preceding and unbounded following)

错误是 window 需要 order by 语句。但是,当对所有行求和时(它给出与没有 window 函数的简单 sum(balance) 相同的结果),信息排序不是必需的。不仅如此,我不希望 SQL 浪费时间对我的行进行排序只是为了对它们进行求和。

在这种情况下 SQL 需要 order by 有充分的理由吗?我是不是太天真了,我是不是错过了什么,或者这实际上是不必要的?

为了计算整个 window,无需提供 ORDER BY 和 window 框架:

SELECT SUM(balance) OVER(PARTITION BY col)
FROM tab

SELECT SUM(balance) OVER()
FROM tab

是的,Snowflake,可以看到你的 unbounded precedingunbounded following 使它与 SUM(balance) 相同,因此像许多其他数据库一样为你重写它,

OR 你可以学会问你想要什么,而不是写得不好 SQL 然后让数据库必须自动魔术清理每个那个时间和 SQL 的所有其他部分都是 运行.