在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是唯一可能的值。
答案 0 :(得分:1)
这样的事情可能有用:
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”(因为它为每个不同的id
生成一行),并为每个type
仅选择“最少”id
。外部查询执行总计数和条件计数。