Как подсчитать различные флаги в sql

# #sql #google-bigquery

Вопрос:

НИЖЕ ПРИВЕДЕН ФРАГМЕНТ МОИХ ДАННЫХ, вот пример кода создания тестирования.

 CREATE TABLE MYGROUP ( Category,PERSON,Flag ) AS
          SELECT 'Cat1','A','1' FROM DUAL
UNION ALL SELECT 'Cat1','A','0' FROM DUAL
UNION ALL SELECT 'Cat1','A','1' FROM DUAL
UNION ALL SELECT 'Cat1','B','1' FROM DUAL
UNION ALL SELECT 'Cat1','B','0' FROM DUAL
UNION ALL SELECT 'Cat2','A','0' FROM DUAL
UNION ALL SELECT 'Cat2','A','0' FROM DUAL
UNION ALL SELECT 'Cat2','A','0' FROM DUAL
UNION ALL SELECT 'Cat2','B','1' FROM DUAL
UNION ALL SELECT 'Cat2','B','1' FROM DUAL
UNION ALL SELECT 'Cat2','B','0' FROM DUAL
UNION ALL SELECT 'Cat3','X','0' FROM DUAL
UNION ALL SELECT 'Cat3','Y','0' FROM DUAL;
 

Желаемый Результат:

Категория — Количество отдельных лиц с Флагом = 1

 Cat1 - 2
Cat2 - 1
Cat3 - 0
 

Мне нужно ввести свой код в большой запрос, чтобы получить четкое количество людей. Это не должно иметь двойного значения.

Комментарии:

1. DUAL это концепция Oracle (и, возможно, другие), но, безусловно, НЕ подходит для SQL Server.

Ответ №1:

Вы можете использовать условную агрегацию

 SELECT
    Category,
    COUNT(DISTINCT CASE WHEN Flag = 1 THEN PERSON END)
FROM MYGROUP
GROUP BY Category;