Oracle SQL计数案例由一列组成

时间:2017-01-26 19:57:36

标签: sql oracle count

在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是唯一可能的值。

1 个答案:

答案 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。外部查询执行总计数和条件计数。