我正在使用PostgreSQL,并有一个类似这样的表,该表显示用户,项目以及用户给定项目的评分(用户可以为特定项目提供多个评分):
name | item | score
---------+-----------+-------
user_1 | item_1 | 3
user_1 | item_2 | 2
user_1 | item_3 | 3
user_1 | item_4 | 4
user_1 | item_1 | 5
user_2 | item_1 | 5
user_2 | item_2 | 2
user_3 | item_3 | 1
user_4 | item_3 | 1
我要查询以下内容:1)选择两个不同用户给予相同分数的项目,2)以以下形式打印结果:
name1 | name2 | item | score
---------+----------+--------+-------
user_1 | user_2 | item_1 | 5
user_2 | user_1 | item_1 | 5
user_1 | user_2 | item_2 | 2
user_2 | user_1 | item_2 | 2
user_3 | user_4 | item_3 | 1
user_4 | user_3 | item_3 | 1
我什至没有找到解决方案。如何根据特定条件(在这种情况下,需要具有相同分数的共同项目)为条件选择两次以不同值将用户列选择到一个结果行中。然后如何为下一行获取相同的两个用户值,但顺序不同。
任何帮助将不胜感激,谢谢!
答案 0 :(得分:0)
典型的联接可以做到:
aws_ami
如果要避免重复元组,请更改user_data
条件,如下所示:
select
t1.name, t2.name, t1.item, t1.score
from mytable t1
join mytable t2 on t1.item = t2.item and t1.score = t2.score
where t1.name <> t2.name
答案 1 :(得分:0)
您要寻找的是自我加入:
SELECT a.name AS name1, b.name AS name2, a.item, a.score
FROM table a INNER JOIN table b
ON a.item = b.item AND a.score = b.score
WHERE a.name != b.name