我有一个与count函数和sum函数相关的SQL查询问题。
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人被雇用,结果似乎是有线的。
有没有人可以帮助我?有什么不对?
谢谢!
答案 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;