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


PostgreSQL FIRST_VALUE用法及代码示例


PostgreSQL,FIRST_VALUE()函数用于在结果集的排序分区中返回第一个值。

用法:
FIRST_VALUE ( expression )  
OVER ( 
    [PARTITION BY partition_expression, ... ]
    ORDER BY sort_expression [ASC | DESC], ...
)

让我们分析以上语法:

  • 这个表达可以是根据结果集排序分区的第一行的值求值的表达式,列或子查询。的表达必须返回单个值。
  • PARTITION BY子句将结果集中的行划分为应用了FIRST_VALUE()函数的分区。当用户使用PARTITION BY子句时,FIRST_VALUE()函数将整个结果集视为单个分区。
  • 这个排序子句指定每个分区中行的排序顺序FIRST_VALUE()函数被应用
  • 这个rows_range_clause通过定义分区的开始和结束来进一步限制分区中的行

范例1:

首先,创建两个表命名产品展示 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);

以下语句使用FIRST_VALUE()函数返回所有产品以及价格最低的产品:

SELECT 
    product_id,
    product_name,
    group_id,
    price,
    FIRST_VALUE(product_name) 
    OVER(
        ORDER BY price
    ) lowest_price
FROM 
    products;

输出:

范例2:

以下语句使用FIRST_VALUE()函数返回按产品组分组的所有产品。对于每个产品组,它以最低的价格返回产品:

SELECT 
    product_id,
    product_name,
    group_id,
    price,
    FIRST_VALUE(product_name) 
    OVER(
    PARTITION BY group_id
        ORDER BY price
        RANGE BETWEEN 
            UNBOUNDED PRECEDING AND 
            UNBOUNDED FOLLOWING
    ) lowest_price
FROM 
    products;

输出:

相关用法


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