我想在《雪花》中解决一个棘手的难题。
假设我有这样的数据
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分类到一个唯一的表中。所以在所有给定ID中。
- 如果在任何给定的点ID等于1 AND/OR A,则"GROUPA">
- 如果在任何给定的点ID等于2 AND/OR B,则"GROUPB">
- 如果1和B出现相同的ID或如果2和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;