#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. большое спасибо за ответ, это легко понять и прочитать, а также для будущих ссылок! большое вам спасибо!!