簡體   English   中英

MYSQL 將一個表中的一個列連接到另一個表中的兩個 count()

[英]MYSQL join one colum from one table to two count() in another

我有一張表,用於存儲在線游戲的排名。 此表(玩家)有 4 列(玩家 ID、玩家名稱、當前 ELO 和玩家狀態)。 我也想顯示贏/輸的比賽,但該信息在重播表中,每場比賽都有一行。 我可以使用 count(*) 函數輕松計算贏局或輸局的數量:

select Winner, count(*) from Replays group by Winner;
select Loser, count(*) from Replays group by Loser;

但是,我找不到連接兩個表的方法,所以我的最終結果是這樣的:

+-------------+-------------+-----------+------------+
| Player_Name | Current_ELO | Won games | Lost games |
+-------------+-------------+-----------+------------+
| John        | 1035        | 5         | 3          |
+-------------+-------------+-----------+------------+

我最好的猜測是這樣,但是返回太多結果,因為我無法為每個計數分別按贏家/輸家對“計數()”進行分組:

select Player_Name,  Current_ELO, Player_Status, count(Winner_Replays.Winner), count(Loser_Replays.Loser) from Players
inner join Replays as Winner_Replays on Winner_Replays.Winner = Players.Player_Name
inner join Replays as Loser_Replays on Loser_Replays.Loser = Players.Player_Name
group by Winner_Replays.Winner order by Current_ELO desc;

理想情況下,由於某些玩家可能有 0 勝或 0 負,我希望它為這些用戶返回 0(如果可能的話)。 謝謝!

您可以在播放結果的玩家列表上使用INNER JOIN使用以下內容。 您可以使用SUMCASE來獲取每個玩家的獲勝/失敗計數。

SELECT Players.Player_Name, ANY_VALUE(Current_ELO), ANY_VALUE(Player_Status),
  SUM(CASE WHEN result = 'L' THEN 1 ELSE 0 END) AS Lost_Games, 
  SUM(CASE WHEN result = 'W' THEN 1 ELSE 0 END) AS Won_Games
FROM Players INNER JOIN (
  SELECT 'W' AS result, Winner AS Player_Name FROM Replays
  UNION ALL
  SELECT 'L', Loser FROM Replays
) win_lose ON Players.Player_Name = win_lose.Player_Name
GROUP BY Players.Player_Name
ORDER BY ANY_VALUE(Current_ELO) DESC;

您還可以像這樣使用LEFT JOIN解決方案:

SELECT Players.Player_Name, ANY_VALUE(Current_ELO) AS Current_ELO, ANY_VALUE(Player_Status) AS Player_Status,
  COUNT(DISTINCT rLoser.ReplayID) AS Lost_Games, 
  COUNT(DISTINCT rWinner.ReplayID) AS Won_Games
FROM Players
  LEFT JOIN Replays AS rWinner ON rWinner.Winner = Players.Player_Name
  LEFT JOIN Replays AS rLoser ON rLoser.Loser = Players.Player_Name
GROUP BY Players.Player_Name
ORDER BY ANY_VALUE(Current_ELO) DESC;

dbfiddle.uk 上的演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM