Oracle SQL按一列计算案例数
在oracle SQL中,我有一个表FINAL,如下所示: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 -- ... -- ... 我想
--------------------
-- 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是唯一可能的值。