进行多次计数,然后在一次查询中求和

Make multiple counts then sum it in one query

我正在寻找有关如何计算 3 个教职员工代码然后将所有计数加总到一个变量中的解决方案。我没有找到合并计数然后求和的正确查询。

这是我的代码:

SELECT COUNT(CASE WHEN `fac_code` LIKE '%JABPN%' THEN 1 END) AS count1,
       COUNT(CASE WHEN `fac_code` LIKE '%JABFNT%' THEN 1 END) AS count2,
       COUNT(CASE WHEN `fac_code` LIKE '%FPKF%' THEN 1 END) AS count3
FROM `list_faculty` WHERE active = 'Y';

我得到的输出:

count1 count2 count3
69 184 36

我需要的输出是所有计数的总和,即 289

添加这个怎么样?

COUNT(CASE WHEN fac_code LIKE '%FPKF%' OR fac_code LIKE %JABFNT%' OR fac_code LIKE  '%JABPN%' THEN 1 END)

SQL 不允许您在同一个 SELECT 中使用别名,因此替代方法是 CTE 或子查询。

您可以在 case .. when 的一个条件中组合这三个计数,或者您可以在它们之间使用 +,如下所示:

SELECT COUNT(CASE WHEN `fac_code` LIKE '%JABPN%'
                    OR `fac_code` LIKE '%JABFNT%'
                    OR `fac_code` LIKE '%FPKF%' 
                  THEN 1 END) AS count1_3
FROM `list_faculty` WHERE active = 'Y';

或者您可以在它们之间使用 +,如下所示:

SELECT COUNT(CASE WHEN `fac_code` LIKE '%JABPN%' THEN 1 END) +
       COUNT(CASE WHEN `fac_code` LIKE '%JABFNT%' THEN 1 END) +
       COUNT(CASE WHEN `fac_code` LIKE '%FPKF%' THEN 1 END) AS count1_3
FROM `list_faculty` WHERE active = 'Y';

在您的情况下,最好的方法是在 WHERE 子句中使用条件,如下所示:

SELECT COUNT(*) 
  FROM `list_faculty` 
 WHERE active = 'Y'
   AND (`fac_code` LIKE '%JABPN%'
        OR `fac_code` LIKE '%JABFNT%'
        OR `fac_code` LIKE '%FPKF%')