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

しかし、(明らかに) それは全体として最初の 3 つのレコードしか得られません.. 誰かが私を正しい方向に向けることができますか?

乾杯、マルセル

4

1 に答える 1

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の 3 つのスコアを取得していましたが、これらがゴルフのスコアであるか、最高のスコアが最小のものである場合は、変更する(または単に削除する)ことをお勧めします。DESCASC

于 2013-03-09T07:46:26.490 に答える