【问题标题】:MSSQL Paginate results with a sum functionMSSQL 使用 sum 函数对结果进行分页
【发布时间】:2012-04-17 11:39:54
【问题描述】:

我有一个表格,其中包含特定日期的某个类别的点击次数。像这样:

ID  CatID   Date                 Count
1   DADB    2011-11-04 00:00:00      3
2   DCBC    2011-11-04 00:00:00      9
3   DADH    2011-11-04 00:00:00      9

所以要显示两个日期之间每个类别的总数,我会这样做:

SELECT WebClicksCategory.CatID, sum(WebClicksCategory.Count) as Count
FROM [Web].[dbo].[WebClicksCategory]
WHERE Date >= '2011-04-17 00:00:00.000'
AND Date <= '2012-04-17 00:00:00.000'
GROUP BY WebClicksCategory.CatID
ORDER BY Count desc 

但是,如果我想对这些结果进行分页并执行以下操作:

SELECT * FROM 
( SELECT  row_number() OVER (order by Count) AS rownum, 
WebClicksCategory.CatID, sum(WebClicksCategory.Count) as Count 
FROM [Web].[dbo].[WebClicksCategory]
WHERE Date >= '2011-04-17 00:00:00.000'
AND Date <= '2012-04-17 00:00:00.000'
GROUP BY WebClicksCategory.CatID
) AS A
WHERE A.rownum BETWEEN (50) AND (200)

但我得到一个“列 WebClicksCategory.Count 在选择列表中无效,因为它既不包含在聚合函数也不包含在 GROUP BY 子句中”错误。还有其他方法可以对结果进行分页吗?

【问题讨论】:

    标签: sql sql-server pagination


    【解决方案1】:

    问题不在于在 中包含聚合,而实际上是在 OVER 子句中包含它:

    ( SELECT  row_number() OVER (order by Count) AS rownum, 
    

    所以我的建议是:

    SELECT rownum, CatID, Count FROM 
    ( SELECT  row_number() OVER (order by Count) AS rownum, CatID, Count
    FROM 
      ( SELECT WebClicksCategory.CatID, sum(WebClicksCategory.Count) as Count 
        FROM [Web].[dbo].[WebClicksCategory]
        WHERE Date >= '2011-04-17 00:00:00.000'
        AND Date <= '2012-04-17 00:00:00.000'
        GROUP BY WebClicksCategory.CatID
      ) AS B
    ) AS A
    WHERE A.rownum BETWEEN (50) AND (200)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-21
      • 1970-01-01
      • 2017-11-01
      • 2018-04-03
      • 2023-03-10
      相关资源
      最近更新 更多