【发布时间】:2020-11-24 06:02:11
【问题描述】:
我从以下两个窗口函数中注意到:
WITH sales AS (
select 2020 as year, 100 as revenue UNION
select 2021 as year, 200 as revenue UNION
select 2022 as year, 300 as revenue UNION
select 2023 as year, 100 as revenue
)
SELECT JSON_ARRAYAGG(revenue) OVER (order by year) FROM sales LIMIT 1;
# revenue_list
[100]
还有这个:
WITH sales AS (
select 2020 as year, 100 as revenue UNION
select 2021 as year, 200 as revenue UNION
select 2022 as year, 300 as revenue UNION
select 2023 as year, 100 as revenue
)
SELECT JSON_ARRAYAGG(revenue) OVER () revenue_list FROM sales LIMIT 1;
# revenue_list
[100, 200, 300, 100]
框架的默认行为似乎是:
- 如果没有提供任何东西 --
()-- 那么默认框架是UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING - 如果提供了任何东西——
(order by year)或(partition by year)等——那么默认框架是UNBOUNDED PRECEDING AND CURRENT ROW。
这是对默认框架行为的正确理解吗?如果是这样,为什么会做出这样的选择? (例如,为什么不让它总是无限的,除非用户指定?)
【问题讨论】:
标签: mysql sql window-functions