繁体   English   中英

MySQL INNER JOIN COUNT()查询

[英]MySQL INNER JOIN COUNT() query

我有两个表的数据库。 一个名为“ Combatants”的人,其列为“ combatantID”。 另一个名为“ Kills”的列有“ killID”,“ shooter”和“ victim”列。 射击者和受害者都是指向“ Combatants.combatantID”的外键。 我想进行查询,以表格形式返回数据:

combatantID,杀死,死亡

我可以使它适用于杀戮或死亡,但不能兼而有之。 做一个或另一个我一直在使用此查询:

SELECT Combatants.combatantID, COUNT(K1.killID) as kills
FROM Combatants 
INNER JOIN Kills as K1 ON K1.shooter=Combatants.combatantID
GROUP BY Combatants.combatantID

但是,如果我将另一个INNER JOIN with table Kills as K2 and add COUNT(K2.killID) as deaths我会得出一个奇怪的结果,我认为这是所有玩家死亡总数,所有玩家死亡总数而不是特定于玩家的死亡总数。

任何建议将不胜感激。 提前致谢。

您有两个不同的选择,可以DISTINCT killID

SELECT
  Combatants.combatantID,
  COUNT(DISTINCT K1.killID) as kills,
  COUNT(DISTINCT k2.killID) as deaths
FROM
  Combatants INNER JOIN Kills as K1 ON K1.shooter=Combatants.combatantID
  INNER JOIN Kills as K2 ON K2.victim=Combatants.combatantID
GROUP BY
  Combatants.combatantID

或者您可以在两个不同的子查询中执行计数:

SELECT
  Combatants.combatantID,
  k1.kills,
  k2.deaths
FROM
  Combatants INNER JOIN (
    SELECT shooter, COUNT(*) AS Kills
    FROM kills
    GROUP BY shooter
  ) k1 ON k1.shooter = Combatants.combatantID
  INNER JOIN (
    SELECT victim, COUNT(*) AS deaths
    FROM kills
    GROUP BY victim
  ) k2 ON k1.victim = Combatants.combatantID

如果战斗人员没有开枪,或者从未成为受害者,也许最好使用左联接代替内联接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM