0

2 つのテーブルがあり、1 つはスコアを含み、もう 1 つはゲームのリストを含みます。ゲームにはさまざまな種類のハイスコアがあります。たとえば、ゴルフ ゲームではスコアが最も低い人が判断されます。

特定のユーザーのハイスコアを他のユーザーと比較してリストを作成しようとしています (ハイスコアを最低スコアと見なすゲームを含む)。

私の古いクエリは、すべてのスコアが MAX スコアであると仮定していましたが、ゲームのスコア タイプが「低」かどうかを確認できるようにする必要があります。CASEを使えば解決できるとのことですが、ゲームテーブルにたどり着こうとして壁にぶち当たります。

SELECT s.game_id、fp.score
FROM game_scores s
INNER JOIN ゲーム g ON s.game_id = g.id
内部結合 (
    選択する
        場合
          WHEN g.score_type = low THEN MIN(スコア)
          WHEN g.score_type = high THEN MAX(スコア)
        END as score, game_id
    FROM game_scores
    GROUP BY game_id
) fp ON s.game_id = fp.game_id AND s.score = fp.score
WHERE s.user_id = 1
4

2 に答える 2

0

したがって、より良い答えを得るために、すべてのコードを提案とともに投稿します。

SELECT s.game_id, fp.score
  FROM game_scores s
       INNER JOIN games g ON s.game_id = g.id
       INNER JOIN (
           SELECT
               CASE
                 WHEN g.score_type = low 
                 THEN MIN(score)
                 ELSE MAX(score)
               END as score, 
               game_id
             FROM game_scores
           GROUP BY game_id
       ) fp 
            ON s.game_id = fp.game_id AND s.score = fp.score
    WHERE s.user_id = 1
于 2013-11-01T19:17:52.393 に答える
0
SELECT
    s.game_id, 
    CASE
        WHEN g.score_type = low  THEN MIN(s.score)
        WHEN g.score_type = high THEN MAX(s.score)
    END as score
FROM game_scores s
INNER JOIN games g ON s.game_id = g.id
WHERE s.user_id = 1
GROUP BY s.game_id, g.score_type
于 2013-11-01T19:17:55.697 に答える