在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;
輸出:
相關用法
- PostgreSQL ARRAY_AGG()用法及代碼示例
- PostgreSQL AVG()用法及代碼示例
- PostgreSQL COUNT()用法及代碼示例
- PostgreSQL STRING_AGG()用法及代碼示例
- PostgreSQL MAX()用法及代碼示例
- PostgreSQL MIN()用法及代碼示例
- PostgreSQL SUM()用法及代碼示例
- PostgreSQL DENSE_RANK用法及代碼示例
- PostgreSQL NULLIF()用法及代碼示例
- PostgreSQL Drop用法及代碼示例
- PostgreSQL LAST_VALUE用法及代碼示例
- PostgreSQL LEAD用法及代碼示例
- PostgreSQL NTILE用法及代碼示例
- PostgreSQL CUME_DIST用法及代碼示例
- PostgreSQL RANK用法及代碼示例
注:本文由純淨天空篩選整理自RajuKumar19大神的英文原創作品 PostgreSQL – FIRST_VALUE Function。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。