在SQL(SnowSQL)中查找非空列的唯一组合并统计出现频次
你可以使用Snowflake内置的数组处理函数实现需求,就算有额外20个字段也只需要按规则补全逻辑即可,不需要复杂的嵌套判断。
具体查询语句
WITH combo_calculate AS ( SELECT ARRAY_TO_STRING( ARRAY_CONSTRUCT_COMPACT( IFF(Price = TRUE, 'Price', NULL), IFF(Size = TRUE, 'Size', NULL), IFF(Weight = TRUE, 'Weight', NULL), IFF(Year = TRUE, 'Year', NULL) -- 剩余20个字段直接按照「IFF(字段名 = TRUE, '字段名', NULL)」的格式补在后面即可 ), ', ' ) AS Combo FROM 你的实际表名 -- 替换为你的业务表名 ) SELECT Combo, COUNT(*) AS Count FROM combo_calculate GROUP BY Combo ORDER BY Count DESC;
逻辑说明
- 用IFF函数对每个字段做判断:如果字段值为TRUE(代表该列非空)就返回字段名,否则返回NULL
ARRAY_CONSTRUCT_COMPACT函数会自动把数组中的NULL值过滤掉,剩下的就是当前行所有非空列的名称集合ARRAY_TO_STRING把数组转换为逗号分隔的字符串,就是你需要的Combo格式- 最后对Combo分组计数即可得到每个组合的出现频次
如果你的字段不是布尔类型,是普通字段需要判断是否为NULL,只需要把IFF的判断条件改为IFF(字段名 IS NOT NULL, '字段名', NULL)即可,逻辑完全通用。
内容的提问来源于stack exchange,提问作者lucas winter
相关产品推荐
相关产品推荐

