多个select count的总和与case函数不同

m0rkklqb  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(293)

我尝试使用case函数使多个select count的和不同。例如:

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

我想把这两个结果放在一列中。有可能吗?

ha5z0ras

ha5z0ras1#

我想你想 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
xienkqul

xienkqul2#

如果您对当前代码满意,那么sum(使用 + )那些 count s、 或者将该查询用作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;

相关问题