我有一个包含以下列的表:
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
但(显然)只给了我整体前三个记录.. 有人可以把我放在正确的方向吗?
干杯,马塞尔
答案 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
(或者只是将其删除)。