繁体   English   中英

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

[英]MySQL Conditional count based on a value in another column

我有这样的表:

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的唯一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(在TopRank> TopRank THEN 1 END的情况下)自然不会给我任何帮助。 那么,如何获得TopRank高于或等于每个不同等级值的id的计数? 还是我看错方向,应该尝试运行总计? 我试图寻找类似的问题,但我认为这里完全错了,因为我找不到任何问题,这似乎是一个非常简单的问题,我只是以某种方式进行了思考。 任何帮助,不胜感激。

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

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM