计算给定id的char的出现次数

yquaqz18  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(263)

我必须执行一个查询,在那里我可以计算每个id的不同代码的数量。

|Id  | Code
   ------------
   | 1  |   C   
   | 1  |   I   
   | 2  |   I   
   | 2  |   C   
   | 2  |   D   
   | 2  |   D   
   | 3  |   C
   | 3  |   I   
   | 3  |   D 
   | 4  |   I   
   | 4  |   C
   | 4  |   C

输出应该类似于:

|Id  | Count | #Code C | #Code I | #Code D
   -------------------------------------------
   | 1  | 2     |    1    |    1    |   0  
   | 2  | 3     |    1    |    0    |   2  
   | 3  | 3     |    1    |    1    |   1  
   | 4  | 2     |    2    |    1    |   0

你能给我一些建议吗?

von4xj4u

von4xj4u1#

如果代码只针对提供的代码,那么下面的查询可以提供所需的结果。

select 
      pvt.Id,
      codes.total As [Count],
      COALESCE(C, 0) AS [#Code C],
      COALESCE(I, 0) AS [#Code I],
      COALESCE(D, 0) AS [#Code D]
      from 
      ( select Id, Code,  Count(code) cnt
        from t
        Group by Id, Code) s
      PIVOT(MAX(cnt) FOR Code IN ([C], [I], [D])) pvt
      join (select Id, count(distinct Code) total from t group by Id) codes on pvt.Id = codes.Id ;

注意:正如我从示例输入数据中看到的,在所有id中都可以找到代码“i”。对于预期输出(在问题中)中的id=3,其计数为零。
以下是正确的输出:

小提琴

owfi6suc

owfi6suc2#

这回答了问题的原始版本。
你在找什么 count(distinct) :

select id, count(distinct code)
from t
group by id;

相关问题