计算具有相同条件的多列
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;
我想根据内容对多个列进行计数。我要计算的每一列(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;