Считать группы по и добавить категорию для инвалидов

У меня есть таблица определения 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 unactivated из перечисления и не может иметь unactivated значение в bdd)

Всего 2 ответа


Рассмотрим использование условного агрегирования:

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;

Есть идеи?

10000