[英]MySQL join / sum value from one table colum with a count values from another
[英]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
使用以下內容。 您可以使用SUM
和CASE
來獲取每個玩家的獲勝/失敗計數。
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.