如何解决如何调试此类分数SQL查询?
请考虑以下表格定义:
表
students
:id INTEGER PRIMARY KEY name VARCHAR(255) NOT NULL score INTEGER NOT NULL class INTEGER NOT NULL
编写一个查询,该查询可以根据所用时间有效地返回 所有得分的学生的姓名,分数和班级的结果 在各自班级中排名最高。
这是我想出的:
select
name,score,class
from
students
where
score in (select max(score)
from students
group by class)
and class in (select class
from students
group by class)
但是上面的查询并未考虑类a拥有的所有测试用例
highest 894
class b -899
class c-900
现在,我的查询还考虑了得分为894的c类学生。
在类中有两个带有相同标记的排行榜时,也会有这种情况。
解决方法
一个带有相关子查询的选项过滤器:
select s.*
from students s
where score = (select max(s1.score) from students s1 where s1.class = s.class)
此查询将利用(class,score)
上的索引。
一种替代方法是使用窗口函数:
select s.*
from (
select s.*,rank() over(partition by class order by score desc) rn
from students s
) s
where rn = 1
两个查询均返回最重要的联系。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。