如何通过主键计算列组中的唯一值的计数

时间:2013-09-30 11:18:36

标签: mysql sql oracle count

我是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

但是不明白如何加入并获得所需的输出。 有人可以帮忙吗

2 个答案:

答案 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