使用 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 中...
- 如果在任何给定点 ID 等于 1 AND/OR A,则“GROUPA”
- 如果在任何给定点 ID 等于 2 AND/OR B,则“GROUPB”
- 如果 1 AND B 出现在同一个 ID 上,或者如果 2 AND A 出现在同一个 ID 上,则 NULL
如果出现任何其他值,没问题,我只关心 1,2,A,B
;每个 ID 至少有一行。
因此生成的 DF 将是...
ID GROUP
001 GROUPA
002 GROUPB
003 GROUPA
004 NULL
005 GROUPB
006 NULL
注意,004
和 006
被剔除,因为在 004
中同时出现了 1
和 B
。同样,即使 A
在 006
中出现了两次,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;
我想在 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 中...
- 如果在任何给定点 ID 等于 1 AND/OR A,则“GROUPA”
- 如果在任何给定点 ID 等于 2 AND/OR B,则“GROUPB”
- 如果 1 AND B 出现在同一个 ID 上,或者如果 2 AND A 出现在同一个 ID 上,则 NULL
如果出现任何其他值,没问题,我只关心 1,2,A,B
;每个 ID 至少有一行。
因此生成的 DF 将是...
ID GROUP
001 GROUPA
002 GROUPB
003 GROUPA
004 NULL
005 GROUPB
006 NULL
注意,004
和 006
被剔除,因为在 004
中同时出现了 1
和 B
。同样,即使 A
在 006
中出现了两次,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;