我的表格看起来像这样:
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
但是我不知道如何计算ID等于或高于第1列中等级的ID。尝试SUM(当TopRank> TopRank然后1结束时)自然给出我一无所获。那么如何获得TopRank高于或等于每个不同等级值的id的数量呢?或者我是否以错误的方式看待并尝试运行总计而不是?我试图寻找类似的问题,但我认为我完全走错了路,因为我找不到任何东西,这似乎是一个非常简单的问题,我只是在某种程度上过度思考。任何帮助非常感谢。
答案 0 :(得分:1)
一种方法是使用相关子查询。只需获取排名列表,然后使用相关子查询来获取您要查找的计数:
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;