【问题标题】: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 个?

【问题讨论】:

    标签: sql sql-server


    【解决方案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
      

      【讨论】:

        猜你喜欢
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多