【问题标题】: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

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

【问题讨论】:

  • edit您的问题(通过点击下面的edit链接)并添加一些示例数据和基于该数据的预期输出为formatted text .请参阅here,了解有关如何创建漂亮的文本表的一些提示。 (edit 您的问题 - 在 cmets 中邮政编码或其他信息)

标签: 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-19
      • 1970-01-01
      • 1970-01-01
      • 2020-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多