Select 过滤和排序行列表 PostgreSQL 中的行位置
Select row position in filtered and ordered row list PostgreSQL
我收到了这个查询,
SELECT s.pos
FROM (SELECT t.guild_id, t.user_id
ROW_NUMBER() OVER(ORDER BY t.reputation DESC) AS pos
FROM users t) s
WHERE (s.guild_id, s.user_id) = (, )
获取公会中用户的 "rank",但我想按 t.user_id
值数组(如 {'1', '64', '83'}
)中的条目过滤结果并具有此影响结果 pos
值。我找到了 FILTER
和 WITHIN GROUP
,但我不确定如何将其中之一放入此查询中。我该怎么做?
这里是完整的 table 如果有帮助的话:
Table "public.users"
Column | Type | Collation | Nullable | Default
------------+-----------------------+-----------+----------+---------
guild_id | character varying(20) | | not null |
user_id | character varying(20) | | not null |
reputation | real | | not null | 0
Indexes:
"users_pkey" PRIMARY KEY, btree (guild_id, user_id)
为什么不先 select 呢?
WITH UsersWeCareAbout AS (
SELECT * FROM users u WHERE u.user_id = ANY(subgroup_array)
), RepUsers AS (
SELECT t.guild_id, t.user_id, ROW_NUMBER() OVER(ORDER BY t.reputation DESC) AS pos
FROM UsersWeCareAbout t
) SELECT s.pos FROM RepUsers s WHERE (s.guild_id, s.user_id) = (, )
(未经测试只是因为我没有足够的上下文来测试)
我收到了这个查询,
SELECT s.pos
FROM (SELECT t.guild_id, t.user_id
ROW_NUMBER() OVER(ORDER BY t.reputation DESC) AS pos
FROM users t) s
WHERE (s.guild_id, s.user_id) = (, )
获取公会中用户的 "rank",但我想按 t.user_id
值数组(如 {'1', '64', '83'}
)中的条目过滤结果并具有此影响结果 pos
值。我找到了 FILTER
和 WITHIN GROUP
,但我不确定如何将其中之一放入此查询中。我该怎么做?
这里是完整的 table 如果有帮助的话:
Table "public.users"
Column | Type | Collation | Nullable | Default
------------+-----------------------+-----------+----------+---------
guild_id | character varying(20) | | not null |
user_id | character varying(20) | | not null |
reputation | real | | not null | 0
Indexes:
"users_pkey" PRIMARY KEY, btree (guild_id, user_id)
为什么不先 select 呢?
WITH UsersWeCareAbout AS (
SELECT * FROM users u WHERE u.user_id = ANY(subgroup_array)
), RepUsers AS (
SELECT t.guild_id, t.user_id, ROW_NUMBER() OVER(ORDER BY t.reputation DESC) AS pos
FROM UsersWeCareAbout t
) SELECT s.pos FROM RepUsers s WHERE (s.guild_id, s.user_id) = (, )
(未经测试只是因为我没有足够的上下文来测试)