SQL:将隐式评级作为用户项列表

时间:2014-05-25 15:49:17

标签: sql postgresql

我有以下表格

  • 具有user字段
  • 的用户表id
  • 项目表item,也带有id字段
  • positiverating,其中包含字段customeriditemid,如果用户对某个商品给出了隐含的正评价(例如已查看/购买/点击/ 。))

我想选择字段user.iditem.idrating(布尔字段),以便每个用户和每个项目rating都是true iif positiverating表中有一个条目,否则false

一些想法:

  • SELECT user.id, item.id from user, item导致十字架 需要的产品。
  • positiveratings或多或少是这样的交叉产品,但仅适用于评级商品

假设有100000个项目和相同数量的用户,则生成的查询需要非常高效。我怀疑需要一些左/右连接,但我觉得有点卡住了。

更具体地说,我需要查询PostgreSQL。

1 个答案:

答案 0 :(得分:1)

这是你在找什么?

select u.userid, i.itemid, (pr.itemid is not null)
from user u cross join
     item i left outer join
     positiverating pr
     on pr.userid = u.userid and pr.itemid = i.itemid;

这假设positiverating表中没有重复的用户/项目组合。

如果您在positiverating中有重复项,则可以使用group by。但是,我建议改用exists。我认为以下内容可行:

select u.userid, i.itemid,
       exists (select 1 from postivierating where pr.userid = u.userid and pr.itemid = i.itemid)
from user u cross join
     item i;