【发布时间】:2014-05-15 19:09:01
【问题描述】:
是否可以限制计算窗口函数的范围?
我正在使用 PostgreSql 8.4。
一个示例查询:
select count(*) over() as TOTAL, id, .... from table limit 100
此查询返回前 100 条记录,其第一列显示所有记录,不考虑限制。
问题是,有没有办法也限制计数内的范围?我的意思是,如果原始查询返回总共5000,我只需要告诉“超过1000”。
编辑:问题可以替换为,PostgreSql 是否有办法知道查询是否有超过“n”个结果?。
【问题讨论】:
-
您可以使用
OVER (ROWS BETWEEN 1000 PRECEDING AND CURRENT ROW)来做到这一点……但如果您想通过这样做来提高效率/提高性能,那将无济于事。您这样做是为了达到什么目的,您的目标是什么,您要解决的问题是什么? -
谢谢克雷格,我是这么认为的。我尝试做的是简单地告诉用户有超过 X 条记录,而他只看到 X 条记录。
-
你真的只关心是否查询
has more than "n" results吗?不是少的话有多少? -
@ErwinBrandstetter,好问题。顺便说一句,我正在考虑删除计数并使用例如限制 101,如果检索到的记录超过 100 我会显示“有超过 100 条记录,请应用过滤器”,如果它们小于 100,只需显示“检索到 X 条记录”。
-
@leonardorame:嗯,这是 Craig 错误的罕见情况之一 - 正如我的回答中所详述的那样。
标签: sql postgresql count postgresql-8.4 window-functions