MySQL - разработка AVG для подмножества значений MAX - PullRequest
1 голос
/ 18 октября 2010

У меня есть таблица с колонками «Дата, Имя, Счет».

Я хочу получить МАКС (Оценка) для строк, которые имеют общее значение (например, для одной и той же даты или даже имени), перед их усреднением, чтобы дать мне цифру, например:

---- Дата ----- | - Имя - | Гол
2010-10-10 | Джон Смит | 86
2010-06-05 | Теди Джонс | 71
2010-10-10 | Джон Смит | 52
2010-06-05 | Теди Джонс | 68
2010-08-08 | Джо Блоггс | 79
2010-10-10 | Джон Смит | 46

Таким образом, МАКС (оценка) по вышеприведенному дало бы мне 86. Однако, мне бы хотелось следующее:

MAX (Оценка), чтобы дать мне значения 86 (MAX для даты 10-10), 79 (MAX для даты 08-08) и 71 (MAX для даты 06-05), которые я могу затем усреднить, чтобы получить 78,67. Я надеюсь, что это возможно без необходимости прибегать к временным таблицам?

Все ответы приветствуются, спасибо.

Ответы [ 2 ]

2 голосов
/ 18 октября 2010

Общее среднее суточных максимальных значений:

SELECT AVG(dailyMax) AS avgOfDailyMax
FROM (SELECT Date, MAX(Score) AS dailyMax FROM MyTable GROUP BY Date) as DailyMaxTable 

и суточных максимальных значений:

SELECT Date, MAX(Score) AS dailyMax
FROM MyTable
GROUP BY Date
1 голос
/ 18 октября 2010
select Date, max(Score) as MaxScore
from MyTable
group by Date

Если вы также хотите Name, выполните

select m.Date, m.Name, m.Score
from (
    select Date, max(Score) as MaxScore
    from MyTable
    group by Date
) mm
inner join MyTable on mm.Date = m.Date 
    and mm.MaxScore = m.Score
...