当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


PostgreSQL ROW_NUMBER用法及代码示例


在PostgreSQL中ROW_NUMBER()函数用于为结果集中的每一行分配一个唯一的整数值。

用法:
ROW_NUMBER() OVER(
    [PARTITION BY column_1, column_2, …]
    [ORDER BY column_3, column_4, …]
)

让我们分析以上语法:

  • 一组行ROW_NUMBER()函数操作称为窗口。
  • 这个分区依据子句将窗口分为较小的集合或分区。
  • 这个排序内的子句OVER子句确定编号分配的顺序。

范例1:

首先,创建两个名为product和product_groups的表:

CREATE TABLE product_groups (
    group_id serial PRIMARY KEY,
    group_name VARCHAR (255) NOT NULL
);

CREATE TABLE products (
    product_id serial PRIMARY KEY,
    product_name VARCHAR (255) NOT NULL,
    price DECIMAL (11, 2),
    group_id INT NOT NULL,
    FOREIGN KEY (group_id) REFERENCES product_groups (group_id)
);

现在向其中添加一些数据:



INSERT INTO product_groups (group_name)
VALUES
    ('Smartphone'),
    ('Laptop'),
    ('Tablet');

INSERT INTO products (product_name, group_id, price)
VALUES
    ('Microsoft Lumia', 1, 200),
    ('HTC One', 1, 400),
    ('Nexus', 1, 500),
    ('iPhone', 1, 900),
    ('HP Elite', 2, 1200),
    ('Lenovo Thinkpad', 2, 700),
    ('Sony VAIO', 2, 700),
    ('Dell Vostro', 2, 800),
    ('iPad', 3, 700),
    ('Kindle Fire', 3, 150),
    ('Samsung Galaxy Tab', 3, 200);

在以下查询中,我们更改了排序product_name的子句,ROW_NUMBER()函数根据产品名称顺序将整数值分配给每一行

SELECT
    product_id,
    product_name,
    group_id,
    ROW_NUMBER () OVER (
           ORDER BY product_name
        )
FROM
    products;

输出:

范例2:

以下查询使用ROW_NUMBER()函数将整数分配给与产品展示表:

SELECT DISTINCT
    price,
    ROW_NUMBER () OVER (ORDER BY price)
FROM
    products
ORDER BY
    price;

输出:

相关用法


注:本文由纯净天空筛选整理自RajuKumar19大神的英文原创作品 PostgreSQL – ROW_NUMBER Function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。