根据 SQL Server 中的条件计数
Posted
技术标签:
【中文标题】根据 SQL Server 中的条件计数【英文标题】:Count based on condition in 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'
?
【参考方案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
【讨论】:
以上是关于根据 SQL Server 中的条件计数的主要内容,如果未能解决你的问题,请参考以下文章