计算具有相同条件的多列

Counting multiple columns with the same criteria

我想根据内容对多个列进行计数。我要计算的每一列(alpha、bravo 和 charlie)都有 'T' 或 'F',我只想计算那些带有 'T'.

的列

到目前为止我有:

select t1.name, count(t1.alpha), count(t1.bravo), count(t1.charlie)
from t1
  where alpha='T',
  or bravo='t'
  or charlie='t'
group by name
order by name asc;

但是我得到的数字与我得到的数字不匹配 运行

select count(*)
from t1
where name='test'
and alpha='t';

此示例需要 运行 在 16 种不同的配置中才能获得我正在寻找的结果,因此编写多个版本并不是一个实用的解决方案。

删除 where 子句并改用 Conditional Aggregate,这将帮助您仅在数据为 T.

count
select t1.name, 
count(case when t1.alpha ='T' then 1 end),
count(case when t1.bravo='T' then 1 end),
count(case when t1.charlie='T' then 1 end)
from t1
group by name
order by name asc;