【问题标题】:Sum of multiple select count distinct with case function与 case 函数不同的多项选择计数的总和
【发布时间】:2020-09-23 22:15:20
【问题描述】:
我尝试使多个选择计数的总和与 case 函数不同。例如:
SELECT id_dept,
count(DISTINCT case when e.statut='pub' then id_patients end) AS nb_patients_pub,
count(DISTINCT case when e.statut='priv' then id_patients end) AS nb_patients_priv
FROM venues
我想将这两个结果放在一栏中。
有可能吗?
【问题讨论】:
标签:
sql
select
group-by
count
【解决方案1】:
如果您对当前代码感到满意,则可以对那些 counts 求和(使用 +),或者将该查询用作 CTE(或内联视图)并
with test as
(SELECT id_dept,
count(DISTINCT case when e.statut='pub' then id_patients end)
AS nb_patients_pub,
count(DISTINCT case when e.statut='priv' then id_patients end)
AS nb_patients_priv
FROM venues
GROUP BY id_dept
)
select id, nb_patients_pub + nb_patients_priv as result
from test;
【解决方案2】:
我想你想要in:
SELECT
id_dept,
COUNT(DISTINCT CASE WHEN e.statut IN ('pub', 'priv') THEN id_patients END) AS nb_patients_pub_and_venues
FROM venues
GROUP BY id_dept
请注意,我在查询中添加了一个 GROUP BY 子句,该子句最初是缺失的(这是几乎所有数据库中的语法错误)。
根据您的数据,这可能不会完全符合您的要求;如果给定的id_patient 具有两种状态,那么它将只计算一次,而您的代码在每个count(distinct ...) 中计算一次。如果是这样,那么您可以只保留两个单独的计数,并将它们相加:
SELECT
id_dept,
COUNT(DISTINCT CASE WHEN e.statut IN = 'pub' THEN id_patients END)
+ COUNT(DISTINCT CASE WHEN e.statut IN = 'priv' THEN id_patients END)
AS nb_patients_pub_and_venues
FROM venues
GROUP BY id_dept