我的表格设置如下:
killerId | killId
1 | 4
1 | 4
2 | 1
3 | 4
4 | 2
5 | 2
1 | 6
从本质上讲,这是一个killfeed,它显示谁在我正在开发的游戏中杀死了谁。
我希望能够生成一个查询,使我能够让玩家看到谁杀死了他们最多。
理想的响应是:
killerId | mostKilledId | timesKilled
1 | 4 | 2
2 | 1 | 1
3 | 4 | 1
4 | 2 | 2
5 | 2 | 2
对于我的用例,我需要查看所有玩家的列表以及他们的“克星”是谁(杀死他们最多的人)。
我有:
SELECT DISTINCT killerId, killedId, COUNT(*) FROM kills GROUP BY killerId, killedId;
哪个会给我以下答复:
killerId | killedId | count
1 | 4 | 2
2 | 1 | 1
3 | 4 | 1
4 | 2 | 1
5 | 2 | 1
1 | 5 | 1
我不想在这里看到重复的killerId,而宁愿只显示计数最高的killerId和KilledId。在上面的示例中,我不想看到最终的杀戮,因为它不高于ID为4的2个杀戮。
编辑:根据评论中的答案,我得到:
SELECT a.killerId, a.killedId, MAX(a.count)
FROM (SELECT killerId, killedId, COUNT(*) as count FROM kills GROUP BY killerId, killedId) AS a
INNER JOIN(SELECT killerId, killedId, MAX(count) count
FROM (SELECT killerId, killedId, COUNT(*) as count FROM kills GROUP BY killerId, killedId) AS c
GROUP BY c.killerId, c.killedId) AS b
ON a.killerId = b.killerId AND a.killedId = b.killedId
GROUP BY a.killerId, a.killedId;
但是我仍然得到与之前相同的结果,而且我感觉好像我不了解这里正在发生什么/正确的前进方向是什么。