使用 SQL 使用 Snowflake 对一列的多行进行分类

Using SQL to categorize a multiple rows of a column using Snowflake

我想在 Snowflake 中找出一个棘手的难题。

假设我有这样的数据

ID    tag
001     A
001     A
002     B
003     A
004     1
003     1
005     B
005     2
004     B
002     C
006     A
006     2
006     A

基本上,我的目标是根据以下标准将每个 ID 分类为唯一的 table。所以在所有给定的 ID 中...

如果出现任何其他值,没问题,我只关心 1,2,A,B ;每个 ID 至少有一行。

因此生成的 DF 将是...

ID      GROUP
001     GROUPA
002     GROUPB
003     GROUPA
004     NULL
005     GROUPB
006     NULL

注意,004006 被剔除,因为在 004 中同时出现了 1B。同样,即使 A006 中出现了两次,2 也不匹配,因此为 NULL。

使用条件聚合,这里:COUNT_IF:

SELECT 
    ID,
    CASE WHEN COUNT_IF(tag IN ('1','A')) > 0 AND COUNT_IF(tag IN ('2','B')) > 0 THEN NULL
         WHEN COUNT_IF(tag IN ('1','A')) > 0 THEN 'GROUPA'
         WHEN COUNT_IF(tag IN ('2','B')) > 0 THEN 'GROUPB'
    END AS grp
FROM tab
WHERE tag IN ('1', '2', 'A', 'B')
GROUP BY ID
ORDER BY ID;