0

我有两张表,一张包含分数,另一张包含游戏列表。游戏有不同类型的高分,例如打高尔夫球是根据谁的得分最低来判断的。

我正在尝试列出某个用户与其他用户相比的高分(包括将高分视为最低分的游戏。)

我的旧查询只是假设所有分数都是 MAX 分数,但现在我需要能够检查游戏的分数类型是否为“低”。我听说使用 CASE 可以解决这个问题,但我在试图到达游戏桌时撞到了一堵墙。

选择 s.game_id,fp.score
FROM game_scores
INNER JOIN 游戏 g ON s.game_id = g.id
内部联接 (
    选择
        案子
          当 g.score_type = 低 THEN MIN(score)
          当 g.score_type = high THEN MAX(score)
        END 作为得分,game_id
    FROM game_scores
    按游戏 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 回答