Oracle SQL按一列计算案例数

Oracle SQL按一列计算案例数,sql,oracle,count,Sql,Oracle,Count,在oracle SQL中,我有一个表FINAL,如下所示: -------------------- -- ID -- TYPE -------------------- -- 123 -- A -- 123 -- A -- 123 -- B -- 123 -- B -- 123 -- C -- 124 -- B -- 124 -- B -- 124 -- C -- ... -- ... 我想

在oracle SQL中,我有一个表FINAL,如下所示:

--------------------
--  ID      -- TYPE
--------------------
-- 123      -- A
-- 123      -- A
-- 123      -- B
-- 123      -- B
-- 123      -- C
-- 124      -- B
-- 124      -- B
-- 124      -- C
-- ...      -- ...
我想要这样的输出:

----------------------------------------------------------------------------------
-- Count distinct IDs -- count (type A) -- count (type B) -- count (type C)
-- 10000              -- 5000           -- 4000           -- 1000
----------------------------------------------------------------------------------
我遇到的问题是,一旦一个ID被计数为A型,它就不能是B或C。一旦它被计数为B型,它就不能是C,也不可能是A。要成为C,它必须被计数为A或B

到目前为止,我有一些

select
count(distinct FINAL.ID)
from 
FINAL

A、 B和C是唯一可能的值

类似的方法可能会奏效:

select count(*) as ct_id,
       count(case type when 'A' then 1 end) as ct_a,
       count(case type when 'B' then 1 end) as ct_b,
       count(case type when 'C' then 1 end) as ct_c
from (
       select   id, min(type) as type
       from     final
       group by id
     )
;

子查询负责distinct,因为它为每个distinct id生成一行,并为每个id选择最小的类型。外部查询进行总计数和条件计数。

a、B和C是唯一可能的值吗?如果还有其他可能的值,是否只需要计算A、B和C?如果这两个问题的答案都是否定的,那么如果没有动态SQL,您想要的可能是不可能的。A、B和C是唯一可能的值。