Как сгруппировать по месяцам, чтобы найти максимальные оценки за этот месяц?

0

У меня есть таблица student_mark, в которой есть столбец даты, метки, student_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;

но я получаю это. Он группируется по отдельной дате, а не по месяцу. Он должен отображать максимальные отметки месяца.


Изображение 174551

Теги:
group-by

4 ответа

2

использовать in вместо or, а также использовать month функцию в группе

select max(mark),month(exam_dt)
from student_mark  
where month(exam_dt) in (04,05,06) 
group by month(exam_dt);
  • 1
    @ SamD82, если кто-то ответит, помогите, пожалуйста, примите его ответ
2

Просто измените свой запрос на SELECT и GROUP BY на месяц, т.е.

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);
0

Очень редко смотреть на месяцы независимо от лет. На самом деле опасно игнорировать год в реальном мире.

Я бы начал с:

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);

Обратите внимание, что я изменил предложение where, чтобы сравнить фактические даты. Это еще одна лучшая практика. Использование функций в столбцах может затруднить оптимизатор и сделать запрос медленнее, чем в противном случае.

0

У вас есть несколько способов, например, вы можете сделать это следующим образом:

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; 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню