我有一个Automate
的表,定义如下:
Colonne Type
id int(11) Incrément automatique
name varchar(255)
type varchar(255)
code varchar(255)
password varchar(255)
active tinyint(1)
我为仪表板制作这样的视图:
SELECT COUNT('type') as count, type as name
FROM automate
GROUP BY type;
但是如果激活了自动功能,这并不重要...首先,我想从报告中删除未激活的自动化(添加简单的where activated = 1
即可轻松实现)
但是我如何添加伪造的type
来计数未激活的自动化?
实际结果:
| type | count |
| comx | 4 |
| gateway| 3 |
想要的结果:
| type | count |
| comx | 1 |
| gateway | 2 |
| unactivated | 4 |
(假设type
来自一个枚举,并且在bdd中不能有unactivated
值]
考虑使用条件聚合:
select
type,
count(*) cnt,
sum(case when active = 1 then 1 else 0 end) activated,
sum(case when active = 0 then 1 else 0 end) inactivated
from automate
group by type
对于每种类型,查询将为您提供记录总数,active = 1
处的记录数和active = 0
处的记录数。
如果active
只能取0
和1
的值,则可以使用:
SELECT type, SUM(active) as num_active,
SUM(1 - active) as num_inactive
FROM automate
GROUP BY type;
如果要将它们添加为其他行,则:
SELECT type, COUNT(*) as num_active,
SUM(1 - active) as num_inactive
FROM automate
WHERE active = 1
GROUP BY type
UNION ALL
SELECT 'inactive', COUNT(*)
FROM automate
WHERE active = 0;