BigQuery — Получить процент нулевых значений в столбце, сгруппированном по другому

# #sql #google-bigquery #legacy-sql

Вопрос:

У меня есть такой стол, как

код хранилища код страны отметка времени
нулевой FR 1234567890
123 FR 1234567890
456 Гб 1234567890
789 Гб 1234567890

Я хотел бы получить

pct_null_store_код код страны
0.5 FR
0.0 Гб

Я знаю, как это сделать с WHERE помощью предложения, как в

 SELECT SAFE_DIVIDE(COUNTIF(store_code IS NULL), COUNT(1)) as pct_null_store_code
FROM table
WHERE country_code = 'XX'
 

Но я хотел бы выполнить только 1 запрос и получить результаты для каждого country_code

Ответ №1:

Один метод просто использует avg() :

 SELECT country_code, 
       AVG(case when store_code IS NULL then 1.0 else 0 end) as null_ratio
FROM table
GROUP BY country_code;
 

Если вы хотите провести подсчет и разделить на общую сумму, то используйте COUNTIF() :

 SELECT country_code, 
       COUNTIF(store_code IS NULL) * 1.0 / COUNT(*) as null_ratio
FROM table
GROUP BY country_code;