一尘不染

如何选择TOP x,但仍能获得整个查询的COUNT个?

sql

我正在写一个网页,以便根据用户指定的过滤条件交互式地过滤结果。我只想从SQL返回前20行,但我想知道有多少行满足条件(计数)。我希望能够告诉用户:“这是与您的条件匹配的前20行,顺便说一句,我这里没有显示另外2,000行”。

我知道我可以简单地运行两次查询,但是EWWWW既昂贵又浪费。如何在不增加数据库负担的情况下实现我想要的?


阅读 142

收藏
2021-03-17

共1个答案

一尘不染

您可以使用 COUNT(*) OVER()

SELECT TOP 20 *, 
       COUNT(*) OVER() AS TotalMatchingRows
FROM master..spt_values
WHERE type='P'
ORDER BY number

但是,执行两个查询可能会更有效,特别是如果您具有可用于确定匹配行数但未涵盖整个SELECT列表的较窄索引时。

2021-03-17