如何在分页之前获取不同行的总数?
Posted
技术标签:
【中文标题】如何在分页之前获取不同行的总数?【英文标题】:How can I get the count of total distinct rows before paging? 【发布时间】:2016-06-10 18:30:00 【问题描述】:SELECT
someColumnA,
someColumnB,
FROM someTable
[A COUPLE JOINS HERE]
[A NICE WHERE STATEMENT]
ORDER BY someColumnA DESC
假设这个查询返回 1000 个结果。当我应用 DISTINCT 时,它会压缩为 300。
我想要做的只是使用分页返回 10 个结果来向我的用户预知,我想包括 DISTINCT ROWS 的总数。如果我在选择中添加带有计数的分页,它将返回 DISTINCT 之前的行数。
这是我到目前为止的最后一个查询
SELECT DISTINCT
count(*) OVER() as total,
someColumnA,
someColumnB,
FROM someTable
[A COUPLE JOINS HERE]
[A NICE WHERE STATEMENT]
ORDER BY someColumnA DESC
OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY
total = 1000 而不是我想要的 300。有没有一种简单的方法来实现这一点,还是我必须求助于使用子选择来获取所有 300 个不同的行,然后对其进行计数并获取前 10 个?
【问题讨论】:
【参考方案1】:您可以尝试使用 group by 而不是 distinct
SELECT
count(*) OVER() as total,
someColumnA,
someColumnB,
FROM someTable
[A COUPLE JOINS HERE]
[A NICE WHERE STATEMENT]
GROUP BY someColumnA, someColumnB
ORDER BY someColumnA DESC
OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY
【讨论】:
【参考方案2】:您可以使用CTE
;WITH CTE_Distinct
AS
(
SELECT DISTINCT
someColumnA,
someColumnB
FROM someTable
[A COUPLE JOINS HERE]
[A NICE WHERE STATEMENT]
)
SELECT
count(*) OVER() as total,
someColumnA,
someColumnB
FROM CTE_Distinct
ORDER BY someColumnA DESC
OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY
【讨论】:
以上是关于如何在分页之前获取不同行的总数?的主要内容,如果未能解决你的问题,请参考以下文章