當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。