mysql计数有多个组

时间:2012-06-29 17:08:45

标签: mysql group-by count

好。我真的不知道我建议我的桌子是否有可能。让我解释一下。

我有这张桌子

CREATE TABLE `kill_log` (
  `time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `killer_cid` int(11) NOT NULL,
  `killed_cid` int(11) NOT NULL,
  `map` varchar(25) NOT NULL DEFAULT '',
  KEY `killer_cid` (`killer_cid`),
  KEY `killed_cid` (`killed_cid`)
)

当有人在游戏中杀死某人时,它会被注册,并且在每个月结束时我需要通过计算他被杀的次数和次数来计算胜利者。

我尝试用群组建立查询,但我无法弄清楚如何计算他被杀的次数..

SELECT killer_cid as char_id, count(killer_cid) as kills
FROM kill_log
WHERE `time` >= (NOW() - INTERVAL 30 DAY)
GROUP BY killer_cid
ORDER BY count(killer_cid) DESC

但我真正需要的是展示

char_id  |  kills  |  deaths  |  points (kills - deaths)

我怎么能这样做?我应该创建一个不同的表并以另一种方式注册东西吗?

我想我可以在他们被杀的时候注册,当他们死亡时,然后按char_id分组并计算他们是否已经死亡或死亡......但是......这种方法可能吗?

2 个答案:

答案 0 :(得分:2)

SELECT U.char_ID, SUM(U.kills) as kills, SUM(U.killed) as deaths, SUM(U.kills)- SUM(U.killed) as points FROM
(
SELECT killer_cid as char_id, count(killer_cid) as kills, 0 as killed
FROM kill_log
WHERE `time` >= (NOW() - INTERVAL 30 DAY)
GROUP BY killer_cid
ORDER BY count(killer_cid) DESC

UNION

SELECT killed_cid as char_id,0 AS kills, count(killer_cid) as killed
FROM kill_log
WHERE `time` >= (NOW() - INTERVAL 30 DAY)
GROUP BY killed_cid
ORDER BY count(killer_cid) DESC
) AS U
GROUP BY U.char_ID
ORDER BY SUM(U.kills)- SUM(U.killed) DESC

答案 1 :(得分:0)

select
 killer.killer_cid as cid,
 count(distinct killer.killed_cid, killer.time) as kills,
 count(distinct killed.killer_cid, killed.time) as died,
 count(distinct killer.killed_cid, killer.time) - count(distinct killed.killer_cid, killed.time) as points
from kill_log as killer
left join kill_log as killed (killer.killer_cid = killed.killed_cid)
group by killer.killer_cid