【发布时间】:2018-09-12 01:59:57
【问题描述】:
我正在使用如下所示的数据集:
| 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”,因为 Name 字段只有 2 个 DISTINCT 值(“ValueA”和“ValueC”)。 High 下面有一个“1”,因为只有 1 个不同的 Name 值(“ValueB”)。对我来说棘手的部分是我不想计算行数,而只是计算匹配的不同值。如果您想知道,数据是重复的,因为还有其他列包含唯一值,但它们与此查询无关。
我自己能够得到的最接近如下,但这只产生了“关键”列,我不知道如何添加逻辑来获得“高”列:
select Host, COUNT(DISTINCT Name) as Critical
from [table]
WHERE Risk = 'Critical'
group by 1;
任何建议将不胜感激。我尝试了一个“COUNTIF”函数,但不断收到错误“Unrecognized function countif”,这似乎很奇怪,因为 BigQuery 文档 (https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#countif) 中列出了“COUNTIF”。也试图使 CASE 工作,但没有取得很大进展。
谢谢!
【问题讨论】:
标签: sql google-bigquery