SkillRack SQL最后一题疑问:年度最高预算电影查询逻辑困惑
SkillRack SQL练习题的逻辑困惑
我已经完成了SkillRack.com上99%的求职编程SQL练习题,这是最后一道,但完全搞不懂题目逻辑,甚至怀疑题目存在概念错误。
表结构(DDL)
create table movie( id int, name varchar(15), releaseyear int, budget int );
数据库数据
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
题目给出的需求
编写SQL查询获取每年最高预算电影的id、name、releaseyear、budget,排序规则为:按budget降序,相同则按releaseyear降序,再相同则按id降序。
预期输出
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
我的困惑
2019年最高预算明明是950000000,但预期输出里却包含了id为509和505的电影(预算均为850000000),这俩完全不是当年最高,恳请解析其中逻辑。
逻辑解析
这明显是题目描述写错了,实际需求并非“获取每年最高预算的电影”,而是:
- 先找出每个年份的最高预算值(比如2018年最高是850000000,2019年最高是950000000,2020年最高是990000000,2017年最高是920000000,2021年最高是990000000)
- 筛选出所有预算等于任意一个年份最高预算值的电影
- 最后按照指定规则排序:
budget降序 →releaseyear降序 →id降序
验证一下:
- 符合条件的预算值集合是:990000000、950000000、920000000、850000000
- 所有预算在这个集合里的电影正好是预期输出里的8条
- 按规则排序后,结果和预期完全一致:
- 990000000的电影:2021的516排在2020的513前面(releaseyear降序)
- 然后是950000000的506(2019)
- 接着是920000000的514(2017)
- 最后是850000000的电影:先排2019的(releaseyear更高),其中id大的509在前,505在后;再排2018的,id大的503在前,501在后
内容的提问来源于stack exchange,提问作者Ragul Shanmugarajan
相关产品推荐
相关产品推荐

