MySQL INNER JOIN COUNT()查询

时间:2014-04-08 18:22:07

标签: mysql sql

我有一个包含两个表的数据库。一个名为“战斗人员”的战斗人员'有一列' combatantID'。另一个名为“杀死”的人。用列' killID','射手'和受害者'。射手和受害者都是指向`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我得到一个奇怪的结果,我认为是所有玩家杀死的总和,所有玩家死亡而不是玩家特定的杀戮,死亡。

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

1 个答案:

答案 0 :(得分:1)

您有两种不同的选择,可以算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

也许最好使用LEFT JOIN而不是INNER JOIN,以防战斗人员没有射击任何人,或者从未成为受害者。