gpt4 book ai didi

sql - 电影评级数据库的新手 SQL 查询问题

转载 作者:搜寻专家 更新时间:2023-10-30 21:45:33 25 4
gpt4 key购买 nike

我有一个只有一张表的数据库,如下所示:

UserID (int), MovieID (int), Rating (real)

userIDs 和 movieIDs 是很大的数字,但我的数据库只有许多可能值的样本(4000 个唯一用户和 3000 个唯一电影)

我要对其进行矩阵 SVD(奇异值分解),因此我想将此数据库作为有序数组返回。基本上,我想按顺序返回每个用户,对于每个用户,按顺序返回每部电影,然后返回该用户、电影对的评分,如果该用户未对特定电影评分,则返回 null。示例:

USERID | MOVIEID | RATING
-------------------------
99835 8847874 4
99835 8994385 3
99835 9001934 null
99835 3235524 2
.
.
.
109834 8847874 null
109834 8994385 1
109834 9001934 null

etc

这样,我可以简单地将这些结果读入二维数组,适合我的 SVD 算法。 (任何其他将信息数据库放入简单的二维 float 组的建议都将不胜感激)

重要的是按顺序返回它,这样当我取回我的二维数组时,我将能够将这些值重新映射到相应的用户和电影以进行我的分析。

最佳答案

SELECT m.UserID, m.MovieID, r.Rating
FROM (SELECT a.userid, b.movieid
FROM (SELECT DISTINCT UserID FROM Ratings) AS a,
(SELECT DISTINCT MovieID FROM Ratings) AS b
) AS m LEFT OUTER JOIN Ratings AS r
ON (m.MovieID = r.MovieID AND m.UserID = r.UserID)
ORDER BY m.UserID, m.MovieID;

现已测试,似乎有效!

概念是创建 Ratings 表中的 UserID 值列表与 Ratings 表中的 MovieID 值列表的笛卡尔积(哎哟!),然后将该完整矩阵与 Ratings 表进行外连接(再次)收集评级值。

这是有效的。

这可能是有效的。

尽管只运行简单的数据选择,并在数据到达时安排填充数组,但您可能会做得更好。如果您有成千上万的用户和电影,您将返回数百万行,但其中大部分将有空值。您应该将传入数据视为稀疏矩阵的描述,首先将程序中的矩阵设置为全零(或其他默认值),然后从数据库中读取流并仅设置实际存在的行。

该查询基本上是微不足道的:

SELECT UserID, MovieID, Rating
FROM Ratings
ORDER BY UserID, MovieID;

关于sql - 电影评级数据库的新手 SQL 查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/319649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com