mysql中的sum函数和count函数

时间:2017-11-05 18:03:07

标签: mysql sql

我有一个与count函数和sum函数相关的SQL查询问题。

我得到的数据有两列,一个是tasker_id,另一个是雇用(" 1"被雇用," 0"不是),同一个ID可以多次雇用,数据如下所示:

Takser_ID     hire
   1           1
   2           0
   1           1
   3           0
   4           1
   2           1
   1           1
   5           0
   3           0
   2           1
   8           0
      ...

由于hire的值是0和1,所以如果我想知道每个tasker_ID被雇佣多少次,如果我使用count()函数或Sum()函数,我应该得到相同的答案。 SQL查询如下所示:

对于count():

select tasker_id, count(hired) as count_hired
from test.test
group by tasker_id
order by count_hired;

对于Sum():

select tasker_id, sum(hired) as sum_hired
from test.test
group by tasker_id
order by sum_hired;

然而,结果完全不同。从结果来看,sum函数似乎是正确的,因为我可以获得一些实际拥有0的Tasker_ID用户。 但是,对于count()函数,没有任何情况下有0人被雇用,结果似乎是有线的。

有没有人可以帮助我?有什么不对?

谢谢!

2 个答案:

答案 0 :(得分:0)

对于你的计数查询,你包括hired = 0的行,我认为你不想这样做。总和不包括那些因为加0不会以任何方式增加总和。在计数查询中应该有一个where子句,其中hired = 1。

select tasker_id, count(hired) as count_hired
from test.test
where hired = 1
group by tasker_id
order by count_hired;

答案 1 :(得分:0)

count只计算行中非空值的数量

所以在你的情况下,你的计数恰好是与tasker_id相关的行数

你可以有一个正确的计数结果,而不是0你有空

您还可以使用案例总和来获取值,例如:

select 
   tasker_id
 , sum(hired) as sum_hired
 , sum(case when hired= 0 then 1  else 0 end ) not_hired_count
from test.test
group by tasker_id
order by sum_hired;