我有以下数据集
id name in out
---------------------------------------
1 jhon True False
1 jhon True False
1 jhon True True
1 jhon True True
2 Smith True True
3 Test True False
我想把计数结果作为
jhon = 2
smith = 1
Test = 0
我只需计算两个(in,out)
中包含true的行我怎么能做到这一点?我还是新手,它只适用于我计算标准sql
中的所有行答案 0 :(得分:4)
这是一个简单的group by
:
select name, count(*)
from the_table
where in = 'True'
and out = 'True'
group by name;
您可能需要正确引用关键字in
和out
(例如"in"
和"out"
),不确定它们是否是SQL Server中的保留关键字。
编辑
您可以通过执行过滤聚合获得零计数:
select name,
count(case when in = 'True' and out = 'True' then 1 else null end) as true_count
from the_table
group by name;
上述方法有效,因为聚合函数(count()
,sum()
,...)忽略空值。如果至少有一列不是case
,则null
表达式的结果为True
。
答案 1 :(得分:2)
您已根据条件将您的记录分组。
select name, count(id)
from table_name
where in = 'True'
and out = 'True'
group by name;
答案 2 :(得分:2)
你的意思是这个:
SELECT name, Count(*) as 'total_count' FROM test WHERE in = 'true' and out = 'true' group by name
如果是的话,那么是的确有效!
答案 3 :(得分:0)
使用以下查询。
select distinct name , isnull(qry.totalcount,0) from table_name left join
(
select name, count(id) as totalcount
from table_name
where in = 'True'
and out = 'True'
group by name) qry
on (qry.name = table_name.name)