MySQL可以从“最大”行返回列吗?

时间:2014-05-29 09:28:36

标签: mysql sql

我在表格中有以下数据: -

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。

5 个答案:

答案 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学生='彼得')

请注意,这是未经测试的。