如何用Hive SQL筛选共享两个及以上销售位置的产品
Hive SQL实现共享两个及以上销售位置的产品筛选
原始表结构与数据
| PRODUCT | Position |
|---|---|
| A | 1, 2, 3 |
| B | 2 |
| C | 7,8,9, 10 |
| D | 2,3,4 |
| E | 7,8,9 |
实现步骤与SQL代码
1. 拆分位置字符串为单行记录
先把每个产品的逗号分隔位置拆成独立行,方便后续统计共享位置:
WITH exploded_positions AS ( SELECT product, trim(pos) AS position FROM your_table_name LATERAL VIEW explode(split(position, ',')) pos_table AS pos )
2. 匹配产品对并统计共享位置数
通过自连接找出所有产品对,统计它们共同拥有的位置数量,同时排除自身匹配和重复产品对(比如A-D和D-A视为同一组):
, product_pair_shared AS ( SELECT ep1.product AS prod1, ep2.product AS prod2, COUNT(DISTINCT ep1.position) AS shared_count FROM exploded_positions ep1 JOIN exploded_positions ep2 ON ep1.position = ep2.position AND ep1.product < ep2.product GROUP BY ep1.product, ep2.product HAVING shared_count >= 2 )
3. 拼接产品对为预期格式
最后把符合条件的产品对用逗号拼接,得到目标结果:
SELECT concat(prod1, ',', prod2) AS matched_products FROM product_pair_shared;
最终输出结果
A,D C,E
内容的提问来源于stack exchange,提问作者Quang Minh Vu
相关产品推荐
相关产品推荐

