# #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;