在查询中过滤反向配对

Filter Reverse Pairing in Query

我正在尝试编写一个 HIVE 查询,其中 returns a.user_id 和 b.user_id 他们都喜欢的电影数量。当我 运行 查询时,我得到 a.user_id、b.user_id、计数和电影集。我还得到 b.user_id、a.user_id、计数和电影集。

我的问题是如何将查询限制为仅 a.user_id、b.user_id 计数和一组电影。

我已经尝试在 Remove reverse duplicates from an SQL query 中提出解决方案,将第 4 行更改为 ON(a.movie_id = b.movie_id AND a.user_id < b.user_id)

SELECT a.user_id, b.user_id, count(*) AS num, collect_set(m.movie_title)
FROM ratings a
JOIN ratings b
ON (a.movie_id = b.movie_id)
JOIN movies m
ON (a.movie_id = m.movie_id AND b.movie_id = m.movie_id)
WHERE (a.user_id <> b.user_id)
GROUP BY a.user_id, b.user_id;
ORDER BY num DESC;

当前输出:

A、B、25、电影列表

B、A、25、电影列表

期望的输出:

A、B、25部电影列表

我希望您的查询是:

SELECT a.user_id, b.user_id, count(*) AS num, collect_set(m.movie_title)
FROM ratings a JOIN
     ratings b
     ON a.movie_id = b.movie_id JOIN
     movies m
     ON a.movie_id = m.movie_id
WHERE a.user_id < b.user_id
GROUP BY a.user_id, b.user_id
ORDER BY num DESC;