【发布时间】:2020-11-27 19:02:57
【问题描述】:
根据https://www.postgresql.org/docs/9.4/queries-table-expressions.html#QUERIES-WINDOW 的 Postgres Doc 声明
如果查询包含任何窗口函数 (...),则在执行任何分组、聚合和 HAVING 过滤后评估这些函数。也就是说,如果查询使用任何聚合、GROUP BY 或 HAVING,则窗口函数看到的行是组行,而不是来自 FROM/WHERE 的原始表行。
我没有得到“然后窗口函数看到的行是组行而不是来自 FROM/WHERE 的原始表行”的概念。请允许我用一个例子来解释我的疑问:
使用下面这个准备运行的示例
with cte as (
select 1 as primary_id, 1 as foreign_id, 10 as begins
union
select 2 as primary_id, 1 as foreign_id, 20 as begins
union
select 3 as primary_id, 1 as foreign_id, 30 as begins
union
select 4 as primary_id, 2 as foreign_id, 40 as begins
)
select foreign_id, count(*) over () as window_rows_count, count(*) as grouped_rows_count
from cte
group by foreign_id
你可能会注意到结果是
因此,如果“窗口函数看到的行是组行”.. 那么 ¿为什么 window_rows_count 返回的值与 grouped_rows_count 不同?
【问题讨论】:
标签: postgresql group-by window-functions