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;
我有 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;