2013-03-09 35 views
3
类别

我有下面的表:MySQL的:SUM 3个记录每

dayoftheweek (VARCHAR) 
player (VARCHAR) 
score (INT) 

对于每个播放器,有或者3,4或5的分数。 我必须计算每位玩家每周最佳3分的平均值。

我正沿

SELECT dayoftheweek, player, (SUM(score)/3) AS average_score 
FROM (SELECT dayoftheweek, player, score 
     FROM scoretable 
     GROUP BY dayoftheweek, player 
     ORDER BY score 
     LIMIT 0, 3) AS query 

但(显然),只有给我的前三个记录总体思路思考.. 有人可以把我在正确的方向吗?

干杯,马塞尔

回答

2

你应该能够编写:

SELECT dayoftheweek, 
     player, 
     (SELECT AVG(score) 
      FROM (SELECT inner.score 
        FROM scoretable AS inner 
        WHERE inner.dayoftheweek = outer.dayoftheweek 
        AND inner.player = outer.player 
        ORDER 
         BY inner.score DESC 
        LIMIT 3 
       ) 
     ) AS best_score_avg 
    FROM scoretable AS outer 
; 

(免责声明:没有测试)

请注意,我用ORDER BY ... DESC拿到三个最大得分,但如果这些是高尔夫分数或者其中最好的分数是至少那些,那么您将想要将DESC更改为ASC(或只是删除它)。