目前,我已经从最后一个fm数据集中筛选出一个子集中的所有噪声,并试图在此子集中构建一个推荐系统。
基本上,我的数据集在数据库中包含以下内容:
用户ID | artistid | artist | totalplays
例子:
00000c289a1829a808ac09c00daf10bc3c4e223b 8BFA288-ccc5-448d-9573-c33ea2aa5c30红辣椒691
我想要实现的是一个所有用户的列表,以及他们听过的某个特定艺术家的全部剧本。
例如,包含红辣椒整数(totalplays)的列表。
问题在于,当我查询以下内容时:
SELECT userid, totalplays FROM dataset WHERE artist = 'red hot chili peppers'我将只获取至少听过一次红辣椒的用户(数据集不包含从未听过艺术家的用户条目)。
我希望它也包含这些整数,以便将其中的两个结果集与Pearson的相关性相匹配,这样我就可以构建一个推荐系统。(我已经实现了这一点)。
我尝试构建一个临时表,其中包含所有不同的用户id,然后使用数据集上的内部连接更新播放量;但不幸的是,这需要太长时间。
我听说过SQL中的IF EXISTS可能性,但我对它们并不熟悉。有人能告诉我正确的方向吗?
再次:我想得到一个用户的总播放次数(不需要计算总和,因为我已经这样做了!)比如那个叫“红辣椒”的艺术家。即使用户在监听数据集中没有记录(因此为此用户返回0)。
提前谢谢!

最佳答案

试试这个

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

关于mysql - SQL推荐系统,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14163907/

10-13 09:29