SQL计数列

时间:2016-05-10 08:50:12

标签: sql sql-server

我有以下数据集

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

中的所有行

4 个答案:

答案 0 :(得分:4)

这是一个简单的group by

select name, count(*)
from the_table
where in = 'True' 
  and out = 'True'
group by name;

您可能需要正确引用关键字inout(例如"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)