【问题标题】:SQL - Combine two COUNT with different WHERE causes and GROUP BY the users names [duplicate]SQL - 结合两个具有不同 WHERE 原因的 COUNT 和 GROUP BY 用户名 [重复]
【发布时间】:2020-05-28 14:50:51
【问题描述】:

我正在努力寻找解决方案,但我找不到解决办法。

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

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

但是......我想要做的是结合这两个查询并按用户的名称显示用户的杀戮和死亡组,这可以在第一种情况下的 killer 列中找到,victim 列在第二种情况下,因此最终能够显示他们的杀戮/死亡比率,但我需要不同的 WHERE 原因,因为在第一种情况下,他们的氏族可以找到为 killerClan 并在第二种情况是victimClan

目标是得到这样的结果。

username | kills | deaths | kdRatio
-----------------------------------
 User_D  |   2   |    1   |    1
 User_A  |   1   |    3   |   -2

欢迎所有建议。

【问题讨论】:

    标签: php mysql sql group-by


    【解决方案1】:

    您可以使用union all 和聚合:

    select 
        username, 
        sum(kills) kills, 
        sum(deaths) deaths,
        sum(kills) - sum(deaths) kdRatio
    from (
        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
    ) t
    group by username
    order by kdRatio desc
    

    【讨论】:

    • 感谢您的回答。我的数据库列名称是 killer、killerClan、victim、victimClan 我必须通过组合 killervictim 列来获取用户名,其中用户是相同的。另外,我需要根据特定的 Clan 呈现结果,也可以找到作为 killerClan 或victimClan 的结果。我没有杀死和杀死的列,所以要找到总的杀死和死亡数,我必须计算氏族名称为 ex 的行。 Team_A 和按用户分组。
    • @GeorgeTagas:是的。上面的查询应该产生预期的结果(即每个用户的杀戮和死亡人数)。请尝试查询。
    • 我得到正确的 sum(kills) 而我得到 sum(deaths) 只有当用户被 TeamA 的用户杀死时,而不是来自其他团队的用户。
    • @GeorgeTagas:我的错。固定。
    • 非常感谢!正是我想要的!我开始失去希望,因为这篇文章被Barmar标记为类似于this one,但我真的找不到解决这个问题的方法。
    猜你喜欢
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 2011-08-31
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    相关资源
    最近更新 更多