我想显示PostgreSQL查询返回的每条记录的观察数.
我认为在8.4窗口函数中可以执行此功能.
我已经阅读了很多关于这个主题的帖子,比如 mysql-get-rank-from-leaderboards.
但是,没有一种解决方案能够从数据库中获得一系列排名.
问题很简单.假设我们有一个带有"id"列的Postgres表和另一个值不是唯一的INTEGER列,但我们有一个该列的索引.
例如,桌子可能是:
CREATE TABLE my_game_users (id serial PRIMARY KEY, rating INTEGER NOT NULL);
目标
尝试#1:row_number()窗口函数
WITH my_ranks AS 
  (SELECT my_game_users.*, row_number() OVER (ORDER BY rating DESC) AS rank
   FROM my_game_users)
SELECT *
FROM my_ranks
WHERE rank >= 4000 AND rank <= 4050
ORDER BY rank ASC;
这"工作",但在快速笔记本电脑上,查询平均550毫秒,100,000个用户,而没有任何其他实际工作.
我尝试添加索引,并重新措辞此查询以不使用"WITH"语法,没有任何方法可以加快速度.
尝试#2 - 计算具有更高评级值的行数 我尝试了这样的查询:
SELECT  t1.*,
  (SELECT  COUNT(*)
   FROM my_game_users t2
   WHERE (t1.rating, -t1.id) <= (t2.rating, -t2.id)
  ) AS rank
FROM my_game_users t1
WHERE …我想使用select语句创建一个表并添加带有行号的列
所以我想写一些类似的东西:
create table schema.table_w_rownumbers as 
select 
    identity(1, 1) as nrum,
    foo.*
from schema.initial_table as foo;