【问题标题】:adding to table a column with serial numbers that based on information in two columns根据两列中的信息向表中添加带有序列号的列
【发布时间】:2015-02-27 00:32:28
【问题描述】:

我有一个包含两列的 100 行表(“GendersHeight”):第一列(“gender”)是一个字符串(“male”或“female”)。第二列(“高度”)是一个可变数字。我根据这两列对表格进行了相应的排序:

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 的列。 有没有办法创建这样一个考虑到“性别”列的性质的连续列?

【问题讨论】:

    标签: postgresql sorting


    【解决方案1】:

    你可以使用rank()函数:

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

    【讨论】:

    • 非常感谢! - 这个解决方案太棒了!!正是我需要的。我绝对可以创建一个额外的表来保存我的新排序/排序的结果。太好了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    相关资源
    最近更新 更多