MySQL 基于另一列中的值的条件计数

MySQL Conditional count based on a value in another column

我有 table 看起来像这样:

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

我已经能够 table 使用所有唯一 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 的计数?还是我看错了方向,应该尝试 运行 totals 之类的东西?我试图寻找类似的问题,但我认为我在这里完全走错了路,因为我找不到任何问题,这似乎是一个非常简单的问题,我只是想多了。非常感谢任何帮助。

一种方法是使用相关子查询。只需获取排名列表,然后使用相关子查询来获取您要查找的计数:

SELECT r.rank,
       (SELECT COUNT(DISTINCT t2.id)
        FROM myTable t2
        WHERE t2.rank >= r.rank
       ) as cnt
FROM (SELECT DISTINCT rank FROM myTable) r;