1

このようなMySqlテーブルがあります

scores
game_id | level | score | time
--------+-------+-------+-----
1       | 1     | 1     | 10
1       | 2     | 0     | 10
1       | 3     | 1     | 20
2       | 1     | 1     | 5
2       | 2     | 1     | 15
2       | 3     | 0     | 10
3       | 1     | 0     | 10
3       | 2     | 0     | 10
3       | 3     | 0     | 10

games
game_id | user_id
--------+--------
1       | 1
2       | 1
3       | 2

そして、ゲームごとにポイントと時間を合計するようにクエリする必要があるため、次のようになります

game_id | user_id | sumPoints | sumTime
--------+---------+-----------+--------
1       | 1       | 2         | 40
2       | 1       | 2         | 30
3       | 2       | 0         | 30

そして、各ユーザーの最高のスコアを取得する必要があるよりも (最高のスコアとは、max(sumPoints) と min(sumTime) を意味するため、次のようになります。

game_id | user_id | sumPoints | sumTime
--------+---------+-----------+--------
2       | 1       | 2         | 30
3       | 2       | 0         | 30

それが最終結果です。ポイントと時間を合計する部分はできますが、ユーザーごとにトップスコアを取得する方法がわかりません。どうすればSQLクエリでこれを行うことができますか? 前もって感謝します

4

2 に答える 2

0

JWの答えは本質的に私のものと同じです。ユーザーを早く導入すると、不必要に複雑になると思います。どうですか...

SELECT x.*
     , u.user_id
  FROM 
     ( SELECT game_id
            , SUM(score) ttl_score
            , SUM(time) ttl_time 
         FROM scores 
        GROUP 
           BY game_id
     ) x
  JOIN
     ( SELECT ttl_score
            , MIN(ttl_time) min_ttl_time
         FROM
            ( SELECT game_id
                   , SUM(score) ttl_score
                   , SUM(time) ttl_time 
                FROM scores 
               GROUP 
                  BY game_id 
            ) a
        GROUP
           BY ttl_score
     ) y
    ON y.ttl_score = x.ttl_score
   AND y.min_ttl_time = x.ttl_time
  JOIN games g
    ON g.game_id = x.game_id;
于 2013-05-02T11:40:45.937 に答える