[英]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.