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

时间:2015-06-04 12:13:10

标签: mysql count distinct conditional-statements

我的表格看起来像这样:

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的数量呢?或者我是否以错误的方式看待并尝试运行总计而不是?我试图寻找类似的问题,但我认为我完全走错了路,因为我找不到任何东西,这似乎是一个非常简单的问题,我只是在某种程度上过度思考。任何帮助非常感谢。

1 个答案:

答案 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;