Считать группы по и добавить категорию для инвалидов - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть таблица 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 в bdd)

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

Если 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;
0 голосов
/ 10 февраля 2020

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

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
...