我有以下所有交易的数据,其中每个客户都购买了多个类别的商品。我需要找到一对甚至不共享一个类别的客户。
Customer_id category_id
21 3
21 5
31 4
31 1
24 3
24 6
22 6
22 5
我试图先使用collect\u set,然后比较交叉连接中的集合,但我不知道hive中有任何这样的函数。有没有可能用一种更简单的方法?以上数据的输出应该是(21,31),(31,24),(31,22),它们是不共享任何类别id的对
SELECT
customer_id, COLLECT_LIST(category_id) AS aggr_set
FROM
tablename
GROUP BY
customer_id
2条答案
按热度按时间yi0zb3m41#
使用
self-join
并计算不匹配的数量和每对客户的总行数。如果他们相等,就意味着他们所有的分类id都不匹配。edqdpe6u2#
您可以使用
cross join
然后是聚合: