mysql:每个类别的SUM 3记录

时间:2013-03-09 07:33:57

标签: mysql sql select greatest-n-per-group

我有一个包含以下列的表:

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

但(显然)只给了我整体前三个记录.. 有人可以把我放在正确的方向吗?

干杯,马塞尔

1 个答案:

答案 0 :(得分: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(或者只是将其删除)。