我是sql的新手,我手头有这个问题。 我有一个表temp,其id和flag作为列。
ID FLAG
-- ----
A 1
A 1
A 0
B 1
B 0
B 0
C 0
C 0
C 0
我需要关于每个ID的1和0计数。
所需的输出是
ID OnesCount ZerosCount
--- --------- ----------
A 2 1
B 1 2
C 0 3
我尝试了很多,我可以通过
单独获取它们select id,count(*) ZerosCount from temp where flag = 0 group by id
select id,count(*) OnesCount from temp where flag = 1 group by id
但是不明白如何加入并获得所需的输出。 有人可以帮忙吗
答案 0 :(得分:2)
在这种特殊情况下,你可以这样做:
select customer_id ID,
sum(pwr_flag) OnesCount,
sum(1-pwr_flag) ZerosCount
from temp_pwr
group by customer_id
在更通用的情况下,您可以使用case when
:
select customer_id ID,
sum(case pwr_flag when 1 then 1 else 0 end) OnesCount,
sum(case pwr_flag when 0 then 1 else 0 end) ZerosCount
sum(case pwr_flag when 17 then 1 else 0 end) SeventeensCount
from temp_pwr
group by customer_id
答案 1 :(得分:0)
select customer_id,
count(case when pwr_flag = 0 then 1 end) ZerosCount,
count(case when pwr_flag = 1 then 1 end) OnessCount
from temp_pwr
group by customer_id