Я работаю с набором данных, который выглядит следующим образом:
| Host | Risk | Name |
| 10.1.1.1 | Critical | ValueA |
| 10.1.1.1 | Critical | ValueA |
| 10.1.1.1 | Critical | ValueA |
| 10.1.1.1 | Critical | ValueA |
| 10.1.1.1 | Critical | ValueA |
| 10.1.1.1 | Critical | ValueA |
| 10.1.1.1 | High | ValueB |
| 10.1.1.1 | High | ValueB |
| 10.1.1.1 | High | ValueB |
| 10.1.1.1 | Critical | ValueC |
| 10.1.1.1 | Critical | ValueC |
| 10.1.1.1 | Critical | ValueC |
| 10.1.1.1 | Critical | ValueC |
Я пытаюсь выяснить запрос, который выдаст сводку, которая выглядит следующим образом:
| Host | Critical | High |
| 10.1.1.1 | 2 | 1 |
Critical имеет "2" внизу, потому что есть только 2 значения DISTINCT поля имени ("ValueA" и "ValueC"). Высокий имеет «1» снизу, потому что есть только 1 отдельное значение имени («ValueB»). Самое сложное для меня в том, что я не пытаюсь подсчитать количество строк, а просто сопоставить разные значения. Если вам интересно, данные дублируются, потому что есть другие столбцы, которые содержат уникальные значения, но они не имеют отношения к этому запросу.
Самым близким, что я смог получить самостоятельно, является следующее, но это привело только к столбцу «Критический», и я не могу понять, как добавить логику для получения столбца «Высокий»:
select Host, COUNT(DISTINCT Name) as Critical
from [table]
WHERE Risk = 'Critical'
group by 1;
Любой совет будет высоко ценится. Я попробовал функцию «COUNTIF», но продолжал получать ошибку «Неопознанный счетчик функций», которая казалась странной, поскольку «COUNTIF» указан в документации BigQuery (https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#countif). Также пытался заставить CASE работать, но не смог добиться большого прогресса.
Спасибо!