SQL推荐系统

时间:2013-01-04 19:49:05

标签: mysql sql system recommendation-engine

目前我已经从last-fm数据集中过滤掉了所有噪声,我正在尝试在此子集之上构建推荐系统。

基本上我的数据集在数据库中包含以下内容:

  

userid | artistid |艺术家|总计

示例:

00000c289a1829a808ac09c00daf10bc3c4e223b   8bfac288-ccc5-448d-9573-c33ea2aa5c30    red hot chili peppers   691

我想要实现的是所有用户的列表以及他们听取特定艺术家的总体情况。 例如,包含红辣椒的整数(总计)的列表。 这个问题是当我查询以下内容时:

SELECT userid, totalplays FROM dataset WHERE artist = 'red hot chili peppers'我只会获取至少听过一次红辣椒的用户(数据集中不包含从未听过艺术家的用户条目)。

我希望它包含这些整数,以便将这些结果集中的两个与Pearson的相关性进行匹配,这样我就可以建立一个推荐系统。 (我已经实现了这个)。

我尝试构建一个临时表,其中包含所有不同的用户ID,然后使用数据集上的内连接更新播放量;但不幸的是,这需要太长时间。

我听说过SQL中IF EXISTS的可能性,但我不熟悉它们。有谁能指出我正确的方向?

再次:我想得到一个用户的总体情况(不需要计算总和,因为我已经完成了!),例如艺术家称为“红辣椒”。即使用户在侦听它们的数据集中没有记录(因此为该用户返回0)。

提前致谢!

1 个答案:

答案 0 :(得分:2)

试试这个

SELECT A.USERID, coalesce(X.totalplays,0) totalplays
FROM (SELECT DISTINCT USERID FROM dataset) A
LEFT OUTER JOIN  (
SELECT userid, totalplays FROM dataset 
WHERE artist = 'red hot chili peppers') X ON A.userid = X.userid

如果你有单独的用户表,那么

SELECT A.USERID, coalesce(X.totalplays,0) totalplays
FROM UserTable A
LEFT OUTER JOIN  (
SELECT userid, totalplays FROM dataset 
WHERE artist = 'red hot chili peppers') X ON A.userid = X.userid