我正在尝试使用 SEDE确定总共授予了多少个基于标签的徽章。我的典型策略是总结:
select sum(TagBased)
from Badges
不幸的是,由于 TagBased
是一个位值,我收到此错误:
Operand data type bit is invalid for sum operator.
出于绝望,我尝试计数:
select count(TagBased)
from Badges
这会计算非空值的数量,在本例中与 count(*)
相同。那么一个位值如何聚合使用呢?
最佳答案
如果您只是想查看基于标签的徽章而不关心其余部分,则可以将测试移至 where 子句:
select count(*)
from Badges
where TagBased = 1
规范的解决方案是将位值转换为可以求和的数据类型:
select sum(cast(TagBased as decimal))
from Badges
更灵活的解决方案是使用 CASE statement 自行进行转换。 :
select sum(case TagBased when 1 then 100.0 end)/count(*) tag_based_per
from Badges
或者,在较新版本的 SQL Server 中,有一个 IIF function :
select sum(iif(TagBased = 1, 1, 0))
from Badges
最后,如果您正在打高尔夫球,您可以欺骗 SQL 来为您转换位:
select sum(TagBased+0)
from Badges
这项技术的功劳归于 Kenneth Baltrinic对更具体问题的回答。
供引用(和潜在的 fork ):my test queries .
关于sql - 如何获取位类型列的计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32255152/