使用 SQL 一起使用 count 和 case

Posted

技术标签:

【中文标题】使用 SQL 一起使用 count 和 case【英文标题】:Use count and case together using SQL 【发布时间】:2021-07-30 00:30:27 【问题描述】:

我想用一个查询返回3列,有多少A型血患者是患者集, 有多少B型血患者,按患者分有多少个国家。

每位患者都使用唯一的 ID 进行识别,因此我所依赖的就是患者 ID。每个州只使用州缩写和血型只是字母。

还有患者集合,集合只是一组患者集合在一起,所以就像一堆患者ID,它们也像患者ID一样是唯一的

到目前为止,我有这样的事情,我不想使用 SUM,因为这会将每个患者 ID 号加在一起,我应该使用 Count。有没有办法使用案例场景来计算?还是有更好的方法来完成我想要的?

select distinct PTID,
select count (patientID CASE WHEN bloodtype = 'A') as totalAbloodtype, 
select count (patientID CASE WHEN bloodtype = 'AB') as totalABbloodtype,
select count  (distinct countrycode) as totalcountriesinset
from patientsinfo 
and PTID is not null
group by PTID

【问题讨论】:

停止使用nolock 溅出你的代码 你需要展示样本数据和想要的结果。 【参考方案1】:

您可以将sumcase expression 一起使用。你不需要distinctgroup by,而且你似乎缺少where 和大量selects,所以你拥有的代码只是一个语法错误。

显然没有样本数据或期望的结果我无法测试,但这个想法是

select PTID,
sum (CASE WHEN bloodtype = 'A'  then 1 else 0 end) as totalAbloodtype, 
sum (CASE WHEN bloodtype = 'AB' then 1 else 0 end) as totalABbloodtype,
count (distinct countrycode) as totalcountriesinset
from patientsinfo 
where PTID is not null
group by PTID

【讨论】:

以上是关于使用 SQL 一起使用 count 和 case的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL 查询中一起使用 union 和 count(*)

SELECT CASE SQL 中的 DISTINCT COUNT

如何在 SQL 中将 CASE 表达式与 SUM 函数一起使用?

将 CASE 与表连接一起使用

[SQL] 请教一下 count里面有case when 一般情况下啥时候用

如何从oracle sql中的选择计数中对rownum使用case语句?