QL - 将两个具有不同 WHERE 原因的计数和按用户名分组

我正在努力寻找解决这个问题的方法,但我看不到一种方法。


我正在插入游戏中的杀戮,我正在记录凶手,他的氏族,受害者和受害者的氏族,所以我的数据库看起来像这样,


killer | killerClan | victim | victimClan

-----------------------------------------

User_A |   Team_A   | User_B |   Team_B

User_C |   Team_B   | User_A |   Team_A

User_B |   Team_B   | User_A |   Team_A

User_D |   Team_A   | User_C |   Team_B

User_C |   Team_B   | User_A |   Team_A

User_B |   Team_B   | User_D |   Team_A

User_D |   Team_A   | User_C |   Team_B

同一用户可以显示为杀手或受害者,这取决于他是否杀死了某人或被某人杀死。


我可以通过以下方式显示特定氏族的用户的总杀戮,


SELECT killer AS username, COUNT(killer) AS kills FROM master_tracker

WHERE killerClan = "Team_A"

GROUP BY killer

ORDER BY kills DESC

通过同样的逻辑,我可以通过以下方式显示特定氏族的用户的总死亡人数,


SELECT victim AS username, COUNT(victim) AS deaths FROM master_tracker

WHERE victimClan = "Team_A"

GROUP BY victim

ORDER BY deaths DESC

但。。。我想做的是将这两个查询结合起来,并按他们的名字显示用户的杀戮和死亡组,这可以在第一种情况下的杀手列和第二种情况下的受害者列中找到,因此最终能够呈现他们的杀戮/死亡比率,但我需要不同的位置原因,因为在第一种情况下,他们的氏族可以被发现为杀手族,在第二种情况下可以找到受害者族。


目标是获得这样的结果。


username | kills | deaths | kdRatio

-----------------------------------

 User_D  |   2   |    1   |    1

 User_A  |   1   |    3   |   -2

欢迎所有建议。


慕容森
浏览 124回答 1
1回答

holdtom

您可以使用和聚合:union allselect     username,     sum(kills) kills,     sum(deaths) deaths,    sum(kills) - sum(deaths) kdRatiofrom (    select killer username, count(*) kills, 0 deaths     from master_tracker     where killerClan = 'TeamA'    group by killer    union all     select victim, 0, count(*)     from master_tracker     where victimClan = 'TeamA'    group by victim) tgroup by usernameorder by kdRatio desc
打开App,查看更多内容
随时随地看视频慕课网APP