BigQuery SQL:按唯一 ID 分组时有条件地计算列值(如果列表中恰好存在 2/3 代码)

问题描述 投票:0回答:1

假设我有以下示例输入表:

| ID   | Code |
|------|------|
| 1234 | 121A |
| 1234 | 334B |
| 1234 | 543A |
| 1112 | 121A |
| 1112 | 333B |
| 2234 | 121A |
| 2234 | 301B |
| 3314 | 121A |

我想创建一个名为“Count”的新列。当且仅当整个表中的唯一 ID 满足以下条件时,“计数”列才获得 1 值:

  • “代码”栏中必须有121A
  • 除了121A外,只能有以下两个代码之一:333B、334B

请注意,如果唯一 ID 具有 121A 以及上面列出的两个代码之一和另一个代码(不是这两个代码),那么也可以。

否则 ID 的“计数”值为 0。

鉴于上述规则,我想要的输出表如下:

身份证 代码
1234 1
1112 1
2234 0
3314 0

我知道如何在 Python 中执行此操作,但不太熟悉 SQL,尤其是 BigQuery SQL。如何使用 BigQuery SQL 编写此查询?

sql group-by google-bigquery count conditional-statements
1个回答
0
投票

看起来您需要条件聚合,例如:

SELECT
  ID,
  CASE WHEN COUNT(CASE WHEN Code = '121A' THEN 1 END) = 1
        AND COUNT(CASE WHEN Code IN ('333B', '334B ') THEN 1 END) = 1
    THEN 1
    ELSE 0 END AS Code
FROM YourTable
GROUP BY
  ID;

上面的代码要求该组满足每个条件一次,而不是更多。如果这不是您的意图,请说清楚。

© www.soinside.com 2019 - 2024. All rights reserved.