sql [db2]选择带条件的语句

use*_*420 2 sql db2 select

我有两张桌子.
player1有行username,score,game_id,...
player2有行用户名,得分,game_id ...
你如何选择同一game_id得分最高的用户名?

我拥有的是什么

SELECT player1.username winning,
  player1.points,
  player1.game_id 
FROM player1 
INNER JOIN player2 ON player1.game_id = player2.game_id
WHERE player1.points > player2.points
Run Code Online (Sandbox Code Playgroud)

SELECT player2.username winning,
  player2.points,
  player2.game_id 
FROM player1 
INNER JOIN player2 ON player1.game_id = player2.game_id
WHERE player2.points > player1.points  
Run Code Online (Sandbox Code Playgroud)

Man*_*chi 5

这应该这样做:

SELECT
    game_id, 
    CASE WHEN p1.score > p2.score THEN p1.username ELSE p2.username END AS winner
FROM
    player1 p1
INNER JOIN
    player2 p2 ON p1.game_id = p2.game_id
ORDER BY 
    p1.game_id ASC
Run Code Online (Sandbox Code Playgroud)

正如Darius所提到的,你可能希望根据Draw的情况调整CASE语句,你可以将它改为这样的:

CASE WHEN p1.score > p2.score THEN p1.username WHEN p1.score < p2.score THEN p2.username ELSE 'Draw' END AS winner
Run Code Online (Sandbox Code Playgroud)

这实际上取决于您希望在该场景中显示的内容.

  • 你也可以改进CASE表达式,这样如果得分相等,你会返回一些东西来告诉你 (2认同)