mysql 计数多个组

标签 mysql group-by count

嗯。我真的不知道通过我构建表格的方式是否可以实现我想要的。让我解释一下。

我得到了这张 table

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 分组并计算他们是被杀死还是死亡...但是...这种方法可行吗?

最佳答案

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

关于mysql 计数多个组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11266052/

相关文章:

Android - 为粘贴文本中的每个字符调用一次 TextWatcher

mysql - 如何将我的 select 语句转换为 update 语句?

mysql - 在 MySQL 中并排显示所有重复项

python - 如何从列 pyspark 中获得第二高的值?

mysql - 如何获取自本月初以来添加的记录数

mysql - SQL:基于多对多表的条件的不同用户的计数

mysql - 如何使用 1 个数据库连接进行读取,另一个用于写入 WordPress MySQL?

mysql - 如何使用不同表中另一列的值替换列中 JSON 值的键?

PHPExcel 和文本换行

mysql - 分组依据 - 返回零计数