Mysql sql-当找到当月的最高分数时,如何按月分组?
我有一个学生分数表,它有日期、分数、学生id列。 我想找到所有学生每个月的最高分数 我正在这样做: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; 但我明白了。 它是按单个日期分组的,而不是按月份分组的。 它应该显示一个月的最高分数 只需将查询更改为选择和按月份分组即可
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如果有人回答有帮助,请接受他的回答