[英]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.