获取SQL中总分最高的学生姓名
我有一个名为“marks”的表,它存储学生的分数获取SQL中总分最高的学生姓名,sql,oracle,greatest-n-per-group,Sql,Oracle,Greatest N Per Group,我有一个名为“marks”的表,它存储学生的分数 id name social math science 2 Max Ruin 85 85 56 3 Arnold 75 40 170 4 Krish 60 70 50 5 John 60 90 80 我想知道总分最高的学生的名字 我试着这样问 SELECT name, (s
id name social math science
2 Max Ruin 85 85 56
3 Arnold 75 40 170
4 Krish 60 70 50
5 John 60 90 80
我想知道总分最高的学生的名字
我试着这样问
SELECT name, (social + math +science) AS total_mark FROM marks where total_mark = max(total_mark );
但这是行不通的。有人能帮忙吗?先获取max()
总计,然后使用子查询
select * from marks where (social+math+science) =
(select max(social+math+science) from marks);
你可以试试这个
SELECT *,(SUM(social)+SUM(math)+SUM(science)) AS total_mark FROM `marks` GROUP BY id ORDER BY total_mark DESC LIMIT 1
可以使用Rank()函数获取人员的排名
SELECT *
FROM
(SELECT name, (social + math + science) as total_mark, Rank() OVER (ORDER BY (social + math + science) DESC) AS rnk
FROM marks)t
WHERE rnk = 1;
不幸的是,sqlfiddle不能使用仅获取前1行。我以前的回答产生了错误的结果。如果你想要一个学生,那么你可以不用子查询来完成这项工作:
select max(name) keep (dense_rank first order by (social + math + science) desc) as top_name
from marks;
嗨,金属,这不起作用。当我尝试此操作时,我总是得到第一个学生记录作为结果。请注意,如果有多个学生的最高成绩,此查询可能会返回多个结果。@Chrᴉz、 这就是OP想要的。你的回答是我的第一个回答。@ϻᴇᴛᴀʟ多亏了你,我注意到我的回答有一个错误:)。我解释说,我得到的学生的名字是最好的。如果有联系呢?fetch first
从Oracle 12c开始就受支持。
select max(name) keep (dense_rank first order by (social + math + science) desc) as top_name
from marks;