求SQL Server查询语句:提取每个年代盈利最高的Top1电影
提取各年代盈利最高Top1电影的SQL Server查询方案
你的原有查询仅对数据做了分组排序,并未筛选出每个年代的盈利Top1电影,所以会返回所有记录。以下是两种可行的解决方案:
方案一:仅取单部Top1(若有并列盈利最高,随机返回其中一部)
使用ROW_NUMBER()窗口函数,按年代分区、盈利降序排序,筛选排名为1的记录:
WITH RankedMovies AS ( SELECT decade, Movie_Title, Profit, -- 按年代分区,盈利降序生成排名 ROW_NUMBER() OVER (PARTITION BY decade ORDER BY Profit DESC) AS rn FROM DW.IMDB_MOVIE ) SELECT decade, Movie_Title, Profit FROM RankedMovies WHERE rn = 1 ORDER BY decade;
方案二:返回所有并列最高的电影(若同一年代有多部盈利相同的最高值)
如果需要保留所有并列第一的电影,改用RANK()函数:
WITH RankedMovies AS ( SELECT decade, Movie_Title, Profit, -- 并列最高会获得相同排名 RANK() OVER (PARTITION BY decade ORDER BY Profit DESC) AS rn FROM DW.IMDB_MOVIE ) SELECT decade, Movie_Title, Profit FROM RankedMovies WHERE rn = 1 ORDER BY decade;
说明
PARTITION BY decade:将数据按年代分组ORDER BY Profit DESC:在每个年代组内按盈利从高到低排序ROW_NUMBER()/RANK():生成组内排名,前者会给并列记录分配不同排名,后者保留相同排名
内容的提问来源于stack exchange,提问作者vsoni
相关产品推荐
相关产品推荐

