1

目前,我已经从 last-fm 数据集中的一个子集中过滤掉了所有噪音,并且我正在尝试在这个子集之上构建一个推荐系统。

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

用户名 | 艺术家 | 艺术家 | 全剧

例子:

00000c289a1829a808ac09c00daf10bc3c4e223b 8bfac288-ccc5-448d-9573-c33ea2aa5c30 红辣椒 691

我想要实现的是所有用户的列表以及他们听过特定艺术家的全部播放。例如,包含红辣椒的整数 (totalplays) 的列表。问题在于,当我查询以下内容时:

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

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

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

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

再说一遍:我想得到一个用户的总播放量(不需要计算总和,因为这我已经完成了!)例如,名为“红辣椒”的艺术家。即使用户在数据集中没有收听他们的记录(因此为该用户返回 0)。

提前致谢!

4

1 回答 1

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
于 2013-01-04T19:56:00.423 回答