我的数据模式如下:
<user> <:bought> <book>
我正在尝试编写一个向用户推荐新书的推荐查询。例如。如果用户u_a
购买了书籍b_1
和b_2
。我发现所有购买u_a
和b_1
的用户(除了b_2
之外,其他用户也购买了其他图书(b_1
和b_2
之外的其他图书) 。
SELECT ?otherbooks (COUNT(*) AS ?t)
FROM <https://book_store1>
WHERE {
<https://book_store1/userId/1495865> <https://book_store1/bought> ?booksbought .
FILTER (?user != <https://book_store1/userId/1495865>)
?user <https://book_store1/bought> ?booksbought .
FILTER (?otherbooks != ?booksbought)
?user <https://book_store1/bought> ?otherbooks .
}
GROUP BY ?otherbooks
ORDER BY DESC (?t)
LIMIT 10
在WHERE
子句的第三行,即?user <https://book_store1/bought> ?booksbought .
,我想做DISTINCT
个用户,即u_b
和u_c
可能都购买了{{1 }}和b_1
。因此,我想在后续的WHERE子句中将单个值分别作为b_2
和u_b
传递为u_c
答案 0 :(得分:0)
调整您的人数以查看唯一身份用户,例如:
SELECT ?otherbooks (COUNT(DISTINCT ?user) AS ?t)