【发布时间】:2015-08-19 01:06:36
【问题描述】:
我的表格如下所示:
id rank
a 2
a 1
b 4
b 3
c 7
d 1
d 1
e 9
我需要在一个列上获取所有不同的排名值,并计算所有已达到与第一列相同或更高排名的唯一 ID。
所以我需要的结果是这样的:
rank count
1 5
2 4
3 3
4 3
7 2
9 1
我已经能够制作一个包含所有唯一 ID 及其最大排名的表格:
SELECT
MAX(rank) AS 'TopRank',
id
FROM myTable
GROUP BY id
我还能够获取所有不同的排名值并计算有多少 id 达到了该排名:
SELECT
DISTINCT TopRank AS 'rank',
COUNT(id) AS 'count of id'
FROM
(SELECT
MAX(rank) AS 'TopRank',
id
FROM myTable
GROUP BY id) tableDerp
GROUP BY TopRank
ORDER BY TopRank ASC
但我不知道如何计算排名等于或高于第 1 列中排名的 id。尝试 SUM(CASE WHEN TopRank > TopRank THEN 1 END) 自然不会给我任何结果。那么如何获得 TopRank 高于或等于每个不同排名值的 id 计数?还是我看错了,应该尝试运行总计之类的方法?我试图寻找类似的问题,但我认为我在这里完全走错了路,因为我找不到任何问题,这似乎是一个非常简单的问题,我只是以某种方式过度思考。非常感谢任何帮助。
【问题讨论】:
-
对不起,你能再解释一下为什么排名 1 = 5,而不是 3??
-
嗨草莓。因为有 5 个不同的 id 的等级为 1 或更高(a、b、c、d 和 e)。
标签: mysql count distinct conditional-statements