求助:修正SQL查询以正确获取每年最高预算电影的完整结果
问题描述
现有通过以下DDL创建的movie表:
create table movie(id int, name varchar(15), releaseyear int, budget int);
实际需求:获取所有预算等于任意年份最高预算的电影的id、name、releaseyear和budget(注:原需求描述存在偏差,实际预期输出对应此逻辑)。
注意事项:
- 结果需按
budget降序排序;若budget相同,则按releaseyear降序排序;若budget和releaseyear均相同,则按id降序排序。 - 禁止使用WITH子句。
原SQL查询:
select m.id,m.name,m.releaseyear,m.budget from movie m join (select releaseyear,max(budget) as maxbudget from movie group by releaseyear) mm on m.releaseyear=mm.releaseyear and m.budget=mm.maxbudget order by budget desc, releaseyear desc, id desc;
测试数据:
501 Movie1 2018 850000000 502 Movie2 2018 800000000 503 Movie3 2018 850000000 504 Movie4 2018 750000000 505 Movie5 2019 850000000 506 Movie6 2019 950000000 507 Movie7 2019 900000000 508 Movie8 2019 500000000 509 Movie9 2019 850000000 510 Movie10 2020 800000000 511 Movie11 2020 700000000 512 Movie12 2020 600000000 513 Movie13 2020 990000000 514 Movie14 2017 920000000 515 Movie15 2017 910000000 516 Movie16 2021 990000000
预期输出:
516 Movie16 2021 990000000 513 Movie13 2020 990000000 506 Movie6 2019 950000000 514 Movie14 2017 920000000 509 Movie9 2019 850000000 505 Movie5 2019 850000000 503 Movie3 2018 850000000 501 Movie1 2018 850000000
实际输出(原SQL):
516 Movie16 2021 990000000 513 Movie13 2020 990000000 506 Movie6 2019 950000000 514 Movie14 2017 920000000 503 Movie3 2018 850000000 501 Movie1 2018 850000000
问题:原SQL仅返回了各年份自身预算最高的电影,未包含那些预算等于其他年份最高预算的电影(例如2019年预算8500万的Movie5和Movie9,8500万是2018年的最高预算)。
修正后的SQL查询
select id, name, releaseyear, budget from movie where budget in ( select max(budget) from movie group by releaseyear ) order by budget desc, releaseyear desc, id desc;
逻辑说明
- 子查询
select max(budget) from movie group by releaseyear先找出所有年份的最高预算值,得到一个预算集合。 - 外层查询筛选出
budget属于这个集合的所有电影,这样就包含了所有预算等于任意年份最高预算的影片。 - 最后按照要求的排序规则对结果进行排序,得到预期输出。
内容的提问来源于stack exchange,提问作者Saran Kumar S
相关产品推荐
相关产品推荐

