【问题标题】:Make multiple counts then sum it in one query进行多次计数,然后在一个查询中求和
【发布时间】:2021-04-20 17:25:15
【问题描述】:
我正在寻找有关如何获取 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
【问题讨论】:
标签:
php
sql
count
phpmyadmin
sum
【解决方案1】:
添加这个怎么样?
COUNT(CASE WHEN fac_code LIKE '%FPKF%' OR fac_code LIKE %JABFNT%' OR fac_code LIKE '%JABPN%' THEN 1 END)
SQL 不允许您在同一个 SELECT 中使用别名,因此可以选择 CTE 或子查询。
【解决方案2】:
您可以将这三个计数组合在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%')