首页 > 解决方案 > 如何从所有用户中获取用户的排名

问题描述

我有一个名为 summary_coins 的表,通过硬币排名,我试图获得用户排名

我试过如下

SELECT 
    user_id,
    sum(get_count),
    rank() over (order by sum(get_count) asc) as rank 
FROM summary_coins 
WHERE user_id = 2
GROUP BY user_id

样本数据,without user_id = 2 in where我得到下面的列表

user_id sum rank
44      2    1
13      4    2
57      4    2
47      4    2
11      5    5
2       5    5

我的愿望:

2       5    5

在这里,我总是为用户 ID 2 获得排名 1,但从用户列表中它应该是排名 5。

标签: sqlpostgresql

解决方案


你想WHERE user_id = 2晚点申请。RANK OVER是查询中发生的最后一件事,但您想在WHERE之后应用该子句。为了做到这一点,使您的查询成为您从中选择的子查询:

SELECT user_id, sum_count, rank
FROM
(
  SELECT 
    user_id,
    sum(get_count) AS sum_count,
    rank() over (order by sum(get_count) asc) as rank 
  FROM summary_coins 
  GROUP BY user_id
) all_users
WHERE user_id = 2;

推荐阅读