我有一个像这样的查询来分页并获取行数。我可以修改此查询以从总结果而不是当前页面中获取所有可能的 col3 吗?
select col1, col2, col3, count(1) over() as row_count
from table1
where col2 in ('a','b')
order by col1
offset 0 rows fetch next 5 rows only
我想避免执行另一个查询来获取跨页面的所有可能的 col3 值。显然,数据来自使用连接的多个表。
Name Course Country Row_Count All_Countries
Jack CS USA 20 USA, UK, UAE, India, Canada
John EE UK 20 USA, UK, UAE, India, Canada
Will IT Canada 20 USA, UK, UAE, India, Canada
Kathy Law USA 20 USA, UK, UAE, India, Canada
Kelly Med UK 20 USA, UK, UAE, India, Canada
这个想法是每页有 5 行。 首页仅包含美国、英国和加拿大国家。 但对于标准,总共有 20 行,国家是美国、英国、阿联酋、印度和加拿大。
您需要将窗口函数放入子查询中,然后使用
OFFSET
进行过滤。
select col1, col2, col3, row_count
from (
select *,
count(*) over() as row_count
from table1 t1
where col2 in ('a','b')
) t1
order by col1
offset 0 rows fetch next 5 rows only;
但是请注意,行集分页速度很慢,并且需要检索所有行才能计算行计数,从而使情况变得更加复杂。使用 Keyset Pagination 远会更好,尽管这不允许您计算总行数。