我正在尝试在db2中为包含书籍和购买书籍的客户的数据库编写查询,并且我要找到购买普通书籍的成对顾客。
例如,数据库被称为“ DB”,它看起来像这样
CustomerID Book Cost
1 Harry Potter 12
2 SOUE 6
3 Harry Potter 12
4 Harry Potter 12
5 SOUE 6
6 SOUE 6
我基本上是在尝试使结果表看起来像
Customer1 Customer2
1 3
1 4
2 5
2 6
我尝试使用分组依据,但似乎无法正确理解
我尝试过
Select book
from DB
group by book
唯一地给了我所有的书,但是我不知道如何获得客户对。任何帮助将不胜感激,谢谢。
答案 0 :(得分:0)
我会根据book
列进行自我加入。为了避免概念上的重复(例如1-3和3-1),您可以任意决定始终在左侧显示较低的客户ID:
SELECT DISTINCT a.customerid, b.customerid
FROM mytable a
JOIN mytable b ON a.book = b.book AND a.customerid < b.customerid
编辑:
要在评论中回答问题,如果要显示客户名称而不是ID,则需要将“客户”表与该查询进行连接,两次,每列一次:< / p>
SELECT DISTINCT ca.name AS customer1, cb.name AS customer2
FROM purchases pa
JOIN purchases pb ON pa.book = pb.book AND pa.customerid < pb.customerid
JOIN customers ca ON pa.customer_id = ca.id
JOIN customers cb ON pb.customer_id = cb.id