使用T-SQL基于分组MAX()筛选电影数据行的技术需求
解决T-SQL中按影片分组并筛选最大总浏览量类型的问题
我明白你卡了一天的痛点——需要先汇总同一影片同一类型的浏览量,再筛选出每部影片里总浏览量最高的类型条目。下面就一步步拆解需求并给出可直接运行的T-SQL方案:
需求拆解
你的源数据里存在同一影片对应多条同类型/不同类型的记录,核心要做两步:
- 先按影片(Title)+类型(Genre)分组,计算每个组合的总浏览量(比如E.T.的Sci-fi类型总浏览量是34+2=36,Taken的Triller是60+40=100)
- 再按影片单独分组,筛选出每部影片中总浏览量最高的那一组数据
实现代码
这里用窗口函数ROW_NUMBER()来高效完成排序筛选,代码逻辑清晰且性能友好:
WITH GenreTotalViews AS ( -- 第一步:汇总每个影片+类型的总浏览量 SELECT Title, Genre, SUM(Views) AS TotalViews FROM YourSourceTable -- 替换成你的实际表名 GROUP BY Title, Genre ), RankedGenres AS ( -- 第二步:给每个影片下的类型按总浏览量降序排名 SELECT Title, Genre, TotalViews, ROW_NUMBER() OVER (PARTITION BY Title ORDER BY TotalViews DESC) AS RankNum FROM GenreTotalViews ) -- 第三步:筛选出每个影片排名第一的条目(即总浏览量最高的类型) SELECT Title, Genre, TotalViews AS Views FROM RankedGenres WHERE RankNum = 1 ORDER BY Title;
代码细节说明
GenreTotalViews公共表表达式(CTE):先完成基础的分组汇总,把同一影片同一类型的分散浏览量合并成总数值。RankedGenresCTE:用ROW_NUMBER()窗口函数,以Title为分区依据(每部电影单独处理),按总浏览量从高到低排序,给每个条目分配唯一排名。- 最终查询只保留排名为1的条目,正好对应每部影片总浏览量最高的类型和数值。
验证结果
把你的源数据代入执行后,会精准得到你预期的结果:
+---------+---------+-------+ | Title | Genre | Views | +---------+---------+-------+ | Mad Max | Sci-fi | 169 | | Titanic | Drama | 6 | | E.T. | Sci-fi | 36 | | Taken | Triller | 100 | +---------+---------+-------+
内容的提问来源于stack exchange,提问作者RunningOverTheHill
相关产品推荐
相关产品推荐

