【问题标题】:Select with count by item and total count in SQL Server在 SQL Server 中使用按项目计数和总计数进行选择
【发布时间】:2014-05-13 18:26:17
【问题描述】:

我正在使用以下过程为每个项目添加计数,到目前为止效果很好。

如果我还想获得总计数以便计算该选择中的所有项目,我该如何更改?

我的程序:

SELECT      RANK() OVER(ORDER BY COUNT(*) desc, policy) [Rank],
            policy, 
            COUNT(*) AS groupCount,
            'currentMonth' AS groupName
FROM        Log_PE 
WHERE       CONVERT(DATE, dateEsc, 120) >= CONVERT(DATE, CONVERT(VARCHAR(6), GETDATE(), 112) + '01', 112)
GROUP BY    policy
ORDER BY    groupCount desc, policy

【问题讨论】:

    标签: sql sql-server count


    【解决方案1】:

    您可以使用 With Rollup(根据 blue 的建议)以及 Grouping Sets, 分组集为您提供更大的灵活性-

    SELECT      RANK() OVER(ORDER BY COUNT(*) desc, policy) [Rank],
                policy, 
                COUNT(*) AS groupCount,
                'currentMonth' AS groupName
    FROM        Log_PE 
    WHERE       CONVERT(DATE, dateEsc, 120) >= CONVERT(DATE, CONVERT(VARCHAR(6), GETDATE(), 112) + '01', 112)
    GROUP BY Grouping Sets (policy,())
    ORDER BY    groupCount desc, policy
    

    【讨论】:

      【解决方案2】:

      已经在另一个帖子中回答了: SUM of grouped COUNT in SQL Query

      select name, COUNT(name) as count from Table
      group by name
          Union all
      select 'SUM', COUNT(name)
      from Table
      

      【讨论】:

      • 谢谢。我已经为每件商品的计数设置了分组依据。在这种情况下,我该如何使用您的建议?
      • 我刚刚测试过,没有任何问题。只需将 'union all' 放在 'group by' 子句之后
      • 只是顺序很棘手:stackoverflow.com/questions/354224/…
      【解决方案3】:

      通过 GROUP BY Modifiers 来聊聊。

      可能有用的部分是WITH ROLLUP

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-19
        • 2013-08-29
        • 2015-11-04
        • 2013-08-01
        • 2014-10-21
        • 1970-01-01
        相关资源
        最近更新 更多