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