使用额外生成的列创建视图
Create View with an additional generated column
在我的 postgres 项目中,我有一个 table users
,我想创建一个仅包含 user_fname
、user_lname
和 user_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 Bianchi
和 Giorgia Verdi
都位于第二位,因为它们共享相同的 35 points
在我的 postgres 项目中,我有一个 table users
,我想创建一个仅包含 user_fname
、user_lname
和 user_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 Bianchi
和 Giorgia Verdi
都位于第二位,因为它们共享相同的 35 points