2010-10-18 1 views
1

J'ai un tableau avec les colonnes 'Date, Nom, Score'.MySQL - élaboration de l'AVG pour un sous-ensemble de valeurs MAX

Je souhaite obtenir le MAX (Score) pour les lignes qui partagent une valeur commune (par exemple pour la même date ou même nom), avant de les en moyenne pour me donner un chiffre, par exemple:

--- - Date ----- | - Nom - | Score
2010-10-10 | John Smith | 86
2010-06-05 | Tedi Jones | 71
2010-10-10 | John Smith | 52
2010-06-05 | Tedi Jones | 68
2010-08-08 | Joe Bloggs | 79
2010-10-10 | John Smith | 46

faire Ainsi, un MAX (Score) sur le dessus ne me donne 86. Cependant, ce que je voudrais est la suivante:

MAX (Partition) pour me donner les valeurs 86 (MAX pour ce jour 10 -10), 79 (MAX pour la date 08-08) et 71 (MAX pour la date 06-05) que je peux alors faire la moyenne pour obtenir 78.67. J'espère que c'est possible sans devoir recourir à des tables temporaires?

Toutes les réponses sont appréciées, merci.

Répondre

2

totale moyenne des valeurs maximales quotidiennes:

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

et valeurs maximales quotidiennes:

SELECT Date, MAX(Score) AS dailyMax 
FROM MyTable 
GROUP BY Date 
+1

Vous êtes un génie, merci! – cbros2008

1
select Date, max(Score) as MaxScore 
from MyTable 
group by Date 

Si vous voulez que le Name ainsi, faire

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 
+0

Merci pour la réponse, mais une fois que j'arrive, comment est-ce que je ferais la moyenne de tous les scores 'MAX'? – cbros2008

Questions connexes