我有一个包含两个表的数据库。一个名为“战斗人员”的战斗人员'有一列' 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
我得到一个奇怪的结果,我认为是所有玩家杀死的总和,所有玩家死亡而不是玩家特定的杀戮,死亡。
任何建议都将不胜感激。提前谢谢。
答案 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,以防战斗人员没有射击任何人,或者从未成为受害者。