Sql 对id的选择性数据进行计数
我想知道解决以下情况的最佳方法,即在一个表中有一个ID和一个状态。 Accepted是结束状态,一旦该状态达到特定ID的Accepted,该ID将不会再进行更新 例如,这就是表格的外观Sql 对id的选择性数据进行计数,sql,oracle,Sql,Oracle,我想知道解决以下情况的最佳方法,即在一个表中有一个ID和一个状态。 Accepted是结束状态,一旦该状态达到特定ID的Accepted,该ID将不会再进行更新 例如,这就是表格的外观 ID | State -----+---------------- 12 | Not Accepted 12 | Not Accepted 12 | Accepted 45 | Not Accepted 67 | Not Accepted 现在,我想将不同的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
我不确定你到底想要什么,但我想你想要这个:
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);
1) 完全不清楚你在问什么。请发布您自己尝试执行此操作的SQL,包括您从该查询中获得的结果,并更清楚地说明问题。2) 当你这样做的时候,改进你的标题来陈述你所问的问题。如果删除了冗余的标记信息(SQL和Oracle),则会留下具有零值或意义的Basic。你的标题应该清楚地说明你遇到的问题或你提出的问题,并且对那些在一组搜索结果中看到它的未来读者来说应该是有意义的。你是冠军,维克!我编辑了你的文章以正确设置格式-我看到你再次编辑以删除格式。干得好,伙计!很抱歉@mathguy,我不打算删除您的格式,我已经处于编辑模式,以使其更合理。谢谢@Art Trifonov