Sql 按分组计数,并添加禁用的类别
我有一个表,其中包含Sql 按分组计数,并添加禁用的类别,sql,view,group-by,mariadb,Sql,View,Group By,Mariadb,我有一个表,其中包含自动执行定义如下: 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('typ
自动执行定义如下:
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;
但这并没有考虑自动控制是否被激活。。。
首先,我想从报告中删除未激活的自动化
(在激活的位置添加一个简单的就很容易了=1
)
但是我如何添加一个假的类型
来计算未激活的数据呢
实际结果:
| type | count |
| comx | 4 |
| gateway| 3 |
通缉结果:
| type | count |
| comx | 1 |
| gateway | 2 |
| unactivated | 4 |
(假设类型
来自枚举,并且在bdd中不能有未激活的
值)考虑使用条件聚合:
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
的记录数
在MariaDB中,您最终用它标记了您的问题,查询可以简化一点:
select
type,
count(*) cnt,
sum(active = 1) activated,
sum(active = 0) inactivated
from automate
group by type
如果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', 0, COUNT(*)
FROM automate
WHERE active = 0;
. . 示例数据、期望的结果和适当的数据库标记都会有所帮助。第二个请求不起作用:使用的SELECT语句具有不同数量的columns@Andrelec1 . . . 非常感谢。通过为活动添加0
,这显然很容易解决。