Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按分组计数,并添加禁用的类别_Sql_View_Group By_Mariadb - Fatal编程技术网

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
,这显然很容易解决。