我在表格中有以下数据: -
Student Subject Marks
Peter English 85
Peter Maths 79
Peter Science 80
Milind English 71
Milind Maths 95
Milind Science 89
我想写一个查询,它会为每个学生提供一个主题,即他/她得分最高的主题。在这种情况下,它将是
Peter English
Milind Maths
提前感谢您的帮助。 Milind。
答案 0 :(得分:2)
你可以这样做:
SELECT
t1.Student, t1.Subject
FROM your_table t1
INNER JOIN (
SELECT MAX(Marks) AS max_marks, Subject
FROM your_table
GROUP BY Subject
) t2 ON t1.Subject = t2.Subject AND t1.Marks = t2.max_marks
答案 1 :(得分:0)
这是你可以做的,但如果学生有2个最大分数,它将只列出其中一个
select
t1.Student,
t1.Subject,
t2.Marks from
table_name t1
join
(
select
Student,
max(Marks) as Marks
from table_name
group by Student
)t2
on t2.Student = t1.Student AND t2.Marks = t1.Marks
group by t1.Student;
如果你需要同时显示max()标记主题,那么最后一组需要更改为
group by t1.Student,t1.Subject;
以下是 demo 来说明这两种情况。
答案 2 :(得分:0)
有几种方法可以做,你可以尝试这个解决方案
select
t1.*
from
your_table t1
left join your_table t2 on t1.Student = t2.Student and t1.Marks < t2.Marks
where
t2.Marks is null
答案 3 :(得分:0)
试试这个,这应该有效:如果有任何澄清,请恢复。
“StudentMarks是表格的名称”
; MaxMarks为 ( 从StudentMarks中选择名称,主题_,标记为高分 按名称分组,主题_,标记 )
从MaxMarks中选择*,其中包含Highmarks (从MaxMarks中选择Max(Highmarks) 按名称分组 )
答案 4 :(得分:-1)
您可以组合多个查询,如下所示:
SELECT * FROM学生WHERE学生='彼得'和标记=(SELECT MAX(标记)WHERE学生='彼得')
请注意,这是未经测试的。