【问题标题】:Count based on condition in SQL Server根据 SQL Server 中的条件计数
【发布时间】:2010-08-11 04:06:38
【问题描述】:

有谁知道如何根据条件在 SQL Server 中进行计数。

例子:

如何对名为“system”的记录以及表中的总 CaseID 记录进行列计数?

客户表

UserID     CaseID     Name
1          100        alan
1          101        alan
1          102        amy
1          103        system
1          104        ken
1          105        ken
1          106        system  

结果如下所示:

UserID    TotalCaseID    TotalRecordsWithSystem
1         7              2

【问题讨论】:

  • 为什么不应该使用WHERE name = 'system'

标签: sql sql-server tsql


【解决方案1】:

使用 SUM/CASE...

SELECT
    COUNT(*),  --total
    SUM(CASE WHEN name = 'system' THEN 1 ELSE 0 END) --conditional
FROM
    myTable

【讨论】:

  • 哦,旧的好 SUM CASE... 总是那么有帮助,总是那么容易忘记。谢谢!
  • ELSE 0 END 对我不起作用。根据@kage 的回答,我必须使用ELSE null END
  • @SebastianJ。可能是因为您在 CASE WHEN .. THEN .. ELSE .. END 构造中使用了 COUNT()。如果你使用SUM() 如图所示,它会工作得很好。
  • SELECT COUNT(*) FROM myTable WHERE name='system' 也可以,不需要CASE WHEN
【解决方案2】:

我认为他希望结果中包含用户 ID

SELECT 
    userid,
    COUNT(*) as TotalcaseID, --total 
    SUM(CASE WHEN name = 'system' THEN 1 ELSE 0 END) as TotalRecordsWithSystem  
FROM 
    myTable 
group by userid

【讨论】:

    【解决方案3】:
    select
    userid,
    count('x') as TotalCaseID,
    count(case when name = 'system' then 'x' else null end) as TotalRecordsWithSystem
    from CustomerTable
    group by userid
    

    【讨论】:

      【解决方案4】:

      如果您使用的是 SQL Server 2012+,那么您可以使用 SUM/IIF

      SELECT
          COUNT(*) AS Total,
          SUM(IIF(Name = 'system', 1, 0)) AS SystemTotal
      FROM
          CustomerTable
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-30
        • 2018-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多