
SELECT userId, MIN(time), RANK() OVER (ORDER BY MIN(time) ASC) AS "rank" FROM game WHERE a = 1 AND b = 2 AN c = 3 GROUP BY userId 这个 sql 能查出按 user 分组之后每个 user 最小的 time 和 rank,但是如果我想只查询其中某个 user 的 rank,应该怎么写呢?还是全部读取再自己 for 一遍?
1 xupefei 2021 年 9 月 5 日 via iPhone 外面加一个 where 不就行了 |
2 noparking188 2021 年 9 月 5 日 Mark,老哥有答案了艾特我一下 |
3 noparking188 2021 年 9 月 5 日 看错了,需求不一样 借题描述下,我想按 userId 分组对每个分组排序 time 计算得出每组一个 rank 排行 你题目中的 SQL 貌似是取每个 user 最小 time 的数据去排名 看你描述的需求我有点模糊,是不是用描述中的 SQL 排序完取其中特定某个 user 的数据? 可以用一个子查询,如果查询次数多慢的话,可以事先将聚合好的数据写进一张聚合表 |
4 uyZL3221XZ2xGZ3D 2021 年 9 月 5 日 1. 获取 userId = xxx 的 min(time) min_time 2. 获取 比 min_time 小的有多少人 按这个思路看看 |
5 adoal 2021 年 9 月 5 日 套一层 CTE |
6 Rwing 2021 年 9 月 5 日 接住第三方会更方便 |
7 vZexc0m 2021 年 9 月 6 日 直接用 Redis 的 ZSet 实现排名。 |
8 AndyMadaou 2022 年 1 月 21 日 @noparking188 窗口函数,rank () over ( partition by userid ordr by datetime ),具体自己搜一下 |
9 noparking188 2022 年 1 月 21 日 @AndyMadaou #8 感谢解答,已经解决了 |