我想知道解决下面场景的最佳方法,我在一个表中有一个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
答案 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);