计算分组依据,并添加禁用类别

问题描述 投票:0回答:2

我有一个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值]

sql view group-by mariadb
2个回答
0
投票

考虑使用条件聚合:

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处的记录数。


0
投票

如果active只能取01的值,则可以使用:

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;
© www.soinside.com 2019 - 2024. All rights reserved.