как перечислить конкретные значения входных данных, превышающие среднее значение

#mysql #sql #subquery #aggregate-functions #greatest-n-per-group

#mysql #sql #подзапрос #агрегатные функции #наибольшее число на группу

Вопрос:

Привет, я должен показать noetud и note_final, которые больше среднего note_final для nocours 420111TT во время сеанса A2019. Как бы мне записать этот запрос в mysql? спасибо за помощь, я изучаю все это для школы и нахожу это увлекательным, но сложным, и это действительно ставит меня в тупик на данный момент.

нокурс нетуд лазерная сессия date_inscrite примечание_финал
320112TT ALCE7888 Н2019 2019-01-06 90
320112TT GAPM9076 Н2019 2019-01-06 65
320112TT ХЭПП8945 Н2019 2019-01-06 87
320112TT PATE8756 Н2019 2019-01-06 70
420111TT ALCE7888 A2019 2019-09-08 78
420111TT GAPM9076 A2019 2019-09-08 75
420111TT HILA7890 A2019 2019-09-08 77
420111TT PATE8756 A2019 2019-09-08 83
444678TT ALCE7888 E2019 2019-06-21 85
444678TT HILA7890 E2019 2019-06-21 80
444678TT PATE8756 E2019 2019-06-21 90

Комментарии:

1. Какие результаты вы хотите?

2. Я хочу, чтобы noetud (переводится в номер учащегося) и их note_final (итоговая оценка) для каждого noetud, у которого note_final больше, чем среднее значение note_final

Ответ №1:

Если я правильно вас понял, вам нужны все строки для данного (nocrous, lasession) значения, которые выше среднего

Один из вариантов использует оконные функции:

 select *
from (
    select t.*, avg(note_final) over() avg_note_final
    from mytable t
    where nocrous = '420111TT' and lasession = 'A2019'
) t
where note_final > avg_note_final
 

В версиях 5.x MSQL вместо этого можно использовать подзапрос:

 select t.*
from mytable t
where nocrous = '420111TT' and lasession = 'A2019' and note_final > (
    select avg(t1.note_final) 
    from mytable t1 
    where t1.nocrous = t.nocrous and t1.lasession = t.lasession
)
 

Комментарии:

1. большое спасибо за ответ, это легко понять и прочитать, а также для будущих ссылок! большое вам спасибо!!