计算id的选择性数据

时间:2016-08-25 02:23:06

标签: sql oracle

我想知道解决下面场景的最佳方法,我在一个表中有一个ID和一个状态。 接受是结束状态,一旦状态达到特定ID的接受状态,则不会对该ID进行进一步更新。

例如,这就是表格的外观

ID   | State
-----+----------------    
12   | Not Accepted
12   | Not Accepted
12   | Accepted
45   | Not Accepted
67   | Not Accepted

现在,我想将不同的ID计入已接受和未接受的桶中。

如果id达到了接受状态,则应将其计入accepted桶中(忽略它之前已“未接受”状态的事实)。 id = 12的示例有2个不接受状态和1个接受状态,因此只应增加accepted的计数。

预期结果

Accepted | Not Accepted
---------+--------------
    1    |      2

我试过这个SQL语句,但它没有给我正确的结果

SELECT 
    SUM(CASE WHEN state = 'Accepted' THEN 1 ELSE 0 END) AS accepted,
    SUM(CASE WHEN state != 'Accepted' THEN 1 ELSE 0 END) AS nonaccepted
FROM 
    SAMPLE;

我得到的结果:

Accepted | Not Accepted
---------+-------------
    1    |      4

1 个答案:

答案 0 :(得分:2)

不确定你究竟要求的是什么,但我认为你想要这个:

select sum(case when min_state = 'Accepted' then 1 else 0 end) accepted_cnt,
       sum(case when min_state = 'Not Accepted' then 1 else 0 end) not_accepted_cnt
from (select id, min(state) min_state
      from my_table
      group by id);