使用额外生成的列创建视图

Create View with an additional generated column

在我的 postgres 项目中,我有一个 table users,我想创建一个仅包含 user_fnameuser_lnameuser_points 顺序的视图通过 user_points 但我还想创建一个带有用户位置的生成列的视图,例如排行榜。

这是我尝试做的,它会更好地解释:

create view leaderboard as
select 
position int generated always as identity,
user_fname, 
user_lname,
points
from users
order by points desc

显然这没有用,因为我正在尝试在那里创建列,但我怎样才能做这样的事情?

基本上你想RANK人基于points

如果我用

重新创建并填充 users table
create table users 
(
user_fname varchar, 
user_lname varchar,
points int
);

insert into users values ('Carlo','Rossi',33);
insert into users values ('Mario','Bianchi',35);
insert into users values ('Giorgia','Verdi',35);
insert into users values ('Maria','Blu',37);

可以用

创建leaderboard
create or replace view leaderboard as
select 
RANK() OVER (ORDER BY POINTS DESC) as position,
user_fname, 
user_lname,
points
from users
order by points desc;

这将提供

defaultdb=> select * from leaderboard order by position;
 position | user_fname | user_lname | points 
----------+------------+------------+--------
        1 | Maria      | Blu        |     37
        2 | Mario      | Bianchi    |     35
        2 | Giorgia    | Verdi      |     35
        4 | Carlo      | Rossi      |     33
(4 rows)

请注意 Mario BianchiGiorgia Verdi 都位于第二位,因为它们共享相同的 35 points