Я получил этот запрос,
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) = ($2, $3)
, который получает "ранг" пользователя в гильдии, но я хочу отфильтровать результаты по записям в массиве t.user_id
значений (например, {'1', '64', '83'}
), и это влияет на итоговое значение pos
.Я нашел FILTER
и WITHIN GROUP
, но я не уверен, как вписать один из них в этот запрос.Как бы я это сделал?
Вот полная таблица, если это вообще поможет:
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)