sql - 如何从所有用户中获取用户的排名
问题描述
我有一个名为 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。
解决方案
你想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;
推荐阅读
- spring-boot - 将队列的动态列表传递给队列侦听器
- android - Android Studio SDK 未显示对 Android 7.1.2 的支持?
- vb.net - 创建动态 DataGridViewComboBoxCells
- python - 使用 Numpy 迭代 DataFrame 行以创建新列
- python - 使用 Python 从 aspx 页面下载 .xls 文件
- node.js - UnhandledPromiseRejectionWarning:nodejs服务器中未处理的承诺拒绝
- r - Rscript在容器中找不到已安装的软件包
- java - 如何将 RESTful 服务器与 Apache Kafka 结合起来?
- angular - 访问指令中的属性
- angular - Angular LazyLoad 模块调用奇怪的组件