获取SQL中总分最高的学生姓名

获取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

我有一个名为“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, (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;