我有一张表,上面有学生姓名、考试成绩和居住城市。我想选择按唯一城市分类的最高考试分数,并包括获得该分数的学生的姓名。
有人能帮助构造这个sql查询吗?
发布于 2020-10-14 11:34:51
在这里,您对细节的了解有点少,但类似下面这样的内容可能会做到
select *
from (
select
s.*,
row_number() over ( partition by student_name, city order by test_score desc ) as seq
from student s
)
where seq = 1发布于 2020-10-14 14:01:09
Title说你应该使用MAX。
这将返回每个城市的最高分数:
select s.city,
max(s.score) max_score
from student s
group by s.city将其用作内联视图:
select a.student_name,
m.city,
m.max_score
from student a join (select s.city,
max(s.score) max_score
from student s
group by s.city
) m
on a.city = m.city
and a.score = m.max_score
order by m.city发布于 2020-10-14 20:04:37
在Oracle中,您可以使用聚合函数完成此操作:
select city, max(score),
max(name) keep (dense_rank first order by score desc)
from t
group by city;keep语法是Oracle实现"first()“聚合函数的一种相当冗长的方法。
https://stackoverflow.com/questions/64346224
复制相似问题