IMDb 评级:只保留不同的记录

Posted

技术标签:

【中文标题】IMDb 评级:只保留不同的记录【英文标题】:IMDb Ratings: Keeping only distinct records 【发布时间】:2015-08-24 16:43:53 【问题描述】:

我正在开展一个个人项目,我正在查看一组朋友的 IMDb 电影评分。我正在尝试制作一个包含所有电影及其属性的主维度表。当多人评价一部电影时会有重复,我想获得不同的电影列表。有 4 个属性会根据某人对电影的评分而改变:DateCreated、IMDb_Rating、Genre 和 Votes。如何仅保留包含“最新”数据的行?

下面是正在发生的事情的一个例子:

如您所见,DateCreated 是相同的,但 IMDb_Rating、Genre 和 Votes 在某些行之间是不同的。我的解决方案是保留得票最高的那一行。

在伪代码中,我想我会使用像 RANK() 这样的窗口排名函数,并按 Votes 对每组 MovieID、Title、Director、Runtime 和 DateRelease 进行排名。然后我会创建一个表,其中只返回排名最高的行。

这有意义吗?对代码的任何帮助都会令人难以置信!

【问题讨论】:

与问题完全无关,但您可能希望进一步规范化您的数据库,因为现在您正在存储一堆重复的信息。当然,这完全取决于您,但是以您的方式存储它会导致您的数据库比其他方式增长得更快。 【参考方案1】:
select MovieID, Title, Director, Runtime, DateRelease,
MAX(Votes) as maxvotes
INTO #sometable
from yourtable
group by MovieID, Title, Director, Runtime, DateRelease

MAX 将满足您的需求。然后,您可以使用into 将获得最高票数的行插入到新表中。

另一种解决方案是使用row_number 窗口函数。

select MovieID, Title, Director, Runtime, DateRelease,
IMDb_Rating, DateCreated, Genre
from
(select *, row_number() over(partition by movieid order by votes desc) as rn
 from yourtable) t
where rn = 1;

【讨论】:

感谢您的回复!但是,如何包含与该 max(Votes) 关联的 IMDb_Rating、DateCreated 和 Genre? @Walker..查看修改后的解决方案。 效果很好!谢谢!!【参考方案2】:
Select <<column names>> 
INTO #sometable
From 
 (select *,
Row_Number() OVER(Partition by MovieID, Title, Director, Runtime, DateRelease Order by Votes Desc) as R_num
from yourtable
 ) Res
Where R_num = 1

【讨论】:

以上是关于IMDb 评级:只保留不同的记录的主要内容,如果未能解决你的问题,请参考以下文章

FlexGet:来自 kinopoisk 的 RSS 解析和检查评级

javascript 导出Netflix的“我的列表”,“观看历史记录”以及竖起/缩小或评级。 Netflix评级与脚本输出的屏幕截图:https://cl.ly/4e15

协同过滤-显式评级和隐式评级

为不同的项目获得多个不同的评级以工作

如何在 iOS 11 和新商店中保持评级

php提交评级数据而不重新加载