您可以进行条件求和。由于您没有提供任何示例数据,以下是您应该能够在您的案例中采用和使用的示例:
with sample_data as (select 1 id, 'a' val1, 10 val2 from dual union all
select 1 id, 'a' val1, 20 val2 from dual union all
select 1 id, 'b' val1, 30 val2 from dual union all
select 1 id, 'b' val1, 40 val2 from dual union all
select 1 id, 'c' val1, 50 val2 from dual union all
select 1 id, 'd' val1, 60 val2 from dual union all
select 1 id, 'e' val1, 70 val2 from dual union all
select 2 id, 'a' val1, 100 val2 from dual union all
select 2 id, 'b' val1, 200 val2 from dual union all
select 2 id, 'b' val1, 300 val2 from dual union all
select 2 id, 'c' val1, 400 val2 from dual union all
select 2 id, 'd' val1, 500 val2 from dual union all
select 2 id, 'd' val1, 600 val2 from dual union all
select 2 id, 'e' val1, 700 val2 from dual)
-- end of creating a subquery that mimics a table called sample_data with data in it.
select id,
count(*) total,
count(case when val1 in ('a', 'b') then 1 end) total_a_b,
count(case when val1 in ('c', 'd') then 1 end) total_c_d
from sample_data
group by id;
ID TOTAL TOTAL_A_B TOTAL_C_D
---------- ---------- ---------- ----------
1 7 4 2
2 7 3 3