Mysql sql-当找到当月的最高分数时,如何按月分组?

Mysql sql-当找到当月的最高分数时,如何按月分组?,mysql,sql,group-by,Mysql,Sql,Group By,我有一个学生分数表,它有日期、分数、学生id列。 我想找到所有学生每个月的最高分数 我正在这样做: select max(mark),exam_dt from student_mark where month(exam_dt) = 04 or month(exam_dt) = 05 or month(exam_dt) = 06 group by exam_dt; 但我明白了。 它是按单个日期分组的,而不是按月份分组的。 它应该显示一个月的最高分数 只需将查询更改为选择和按月份分组即可

我有一个学生分数表,它有日期、分数、学生id列。 我想找到所有学生每个月的最高分数

我正在这样做:

select max(mark),exam_dt 
from student_mark  
where month(exam_dt) = 04 or month(exam_dt) = 05 or month(exam_dt) = 06 
group by exam_dt;
但我明白了。 它是按单个日期分组的,而不是按月份分组的。 它应该显示一个月的最高分数



只需将查询更改为
选择
按月份分组即可

select max(mark), month(exam_dt)
from student_mark  
where month(exam_dt) = 04 or month(exam_dt) = 05 or month(exam_dt) = 06 
group by month(exam_dt);

只需将查询更改为
选择
按月份分组即可

select max(mark), month(exam_dt)
from student_mark  
where month(exam_dt) = 04 or month(exam_dt) = 05 or month(exam_dt) = 06 
group by month(exam_dt);

您有一些不同的方法,例如,您可以这样做:

select max(mark),exam_month from
    (select mark,month(exam_dt) as exam_month from student_mark)
     where exam_month = 04 or exam_month = 05 or exam_month = 06 group by exam_month; 

您有一些不同的方法,例如,您可以这样做:

select max(mark),exam_month from
    (select mark,month(exam_dt) as exam_month from student_mark)
     where exam_month = 04 or exam_month = 05 or exam_month = 06 group by exam_month; 

中使用
而不是
,并在分组方式中使用
功能

select max(mark),month(exam_dt)
from student_mark  
where month(exam_dt) in (04,05,06) 
group by month(exam_dt);

中使用
而不是
,并在分组方式中使用
功能

select max(mark),month(exam_dt)
from student_mark  
where month(exam_dt) in (04,05,06) 
group by month(exam_dt);

独立于年份的月份很少有意思。事实上,在现实世界中无视年份是危险的

首先,我想说:

select year(exam_dt) as yyyy, month(exam_dt) as mm, max(mark)
from student_mark  
where month(exam_dt) in (4, 5, 6) 
group by year(exam_dt), month(exam_dt);
如果您只对2017年感兴趣,那么您的查询应该是明确的:

select month(exam_dt) as mm, max(mark)
from student_mark  
where exam_dte >= '2017-04-01' and exam_dt < '2017-07-01'
group by month(exam_dt);
选择月份(检查时间)作为毫米,最大(标记)
从学生分数
其中,考试日期>='2017-04-01'和考试日期<'2017-07-01'
按月分组(考试日);

注意,我更改了
where
子句以比较实际日期。这是另一个最佳做法。在列上使用函数可能会阻碍优化器的运行,并使查询速度比其他方式慢。

很少关注独立于年的月份。事实上,在现实世界中无视年份是危险的

首先,我想说:

select year(exam_dt) as yyyy, month(exam_dt) as mm, max(mark)
from student_mark  
where month(exam_dt) in (4, 5, 6) 
group by year(exam_dt), month(exam_dt);
如果您只对2017年感兴趣,那么您的查询应该是明确的:

select month(exam_dt) as mm, max(mark)
from student_mark  
where exam_dte >= '2017-04-01' and exam_dt < '2017-07-01'
group by month(exam_dt);
选择月份(检查时间)作为毫米,最大(标记)
从学生分数
其中,考试日期>='2017-04-01'和考试日期<'2017-07-01'
按月分组(考试日);

注意,我更改了
where
子句以比较实际日期。这是另一个最佳做法。在列上使用函数可能会阻碍优化器的运行,并使查询速度比其他情况下慢。

@SamD82如果有人回答帮助,请接受他的回答answer@SamD82如果有人回答有帮助,请接受他的回答