向表中添加一列,其中包含基于两列中信息的序列号



我有一个包含两列的 100 行表("性别高度"):第一列("性别")是一个字符串("男性"或"女性")。 第二列("高度")是一个可变数字。我根据这两列对表格进行了相应的排序:

select *
into MyNewTable 
from GendersHeight
order by gender, height DESC 

(我的表中有 40 个"男性"行和 60 个"女性"行)现在我想向包含序列号的表"MyNewTable"添加一个新列(第 3 列)。如果我使用脚本:

ALTER TABLE MyNewTable
Add column MySorter serial NOT NULL; 

我只会得到一个范围从 1 到 100 的串行列。但是 - 我在这里真正想要实现的是创建一个列,该列首先为所有"女性"条目创建范围从 1 到 60,然后为所有"男性"条目创建范围从 1 到 40。有没有办法创建这样一个考虑到"性别"列性质的系列列?

你可以使用 rank() 函数:

CREATE TABLE "MyNewTable" AS
SELECT gender,
    height,
   rank() OVER(partition by gender order by height) as myrank
 FROM "GendersHeight"

最新更新