0

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

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

4

2 回答 2

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
于 2013-09-30T11:26:28.940 回答
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
于 2013-09-30T11:26:52.830 回答