八月 27, 2023
摘要:在本教程中,您将学习如何使用 PostgreSQL 的FIRST_VALUE()
函数,返回结果集排序分区中的第一个值。
目录
PostgreSQL FIRST_VALUE()
函数介绍
FIRST_VALUE()
函数返回根据结果集排序分区中的第一行计算的值。
以下是FIRST_VALUE()
函数的语法:
FIRST_VALUE ( expression )
OVER (
[PARTITION BY partition_expression, ... ]
ORDER BY sort_expression [ASC | DESC], ...
FIRST_VALUE ( expression )
OVER (
[PARTITION BY partition_expression, ... ]
ORDER BY sort_expression [ASC | DESC], ...
)
在这个语法中:
expression
expression
可以是根据结果集排序分区的第一行计算的表达式、列或子查询。expression
必须返回单个值。而且它不能是一个窗口函数。
PARTITION BY 子句
PARTITION BY
子句将结果集中的行划分为应用FIRST_VALUE()
函数的分区。
PARITION BY
子句是可选的。如果跳过它,FIRST_VALUE()
函数将整个结果集视为单个分区。
ORDER BY 子句
ORDER BY
子句指定应用FIRST_VALUE()
函数的每个分区中行的排序顺序。
rows_range_clause
rows_range_clause
通过定义分区中的开始和结束进一步限制分区内的行。
PostgreSQL FIRST_VALUE()
函数示例
我们将使用窗口函数教程中创建的products
表进行演示:
products
表中数据如下:
1) 在结果集上使用 FIRST_VALUE()
函数的示例
以下语句使用FIRST_VALUE()
函数返回所有产品以及价格最低的产品:
SELECT
product_id,
product_name,
group_id,
price,
FIRST_VALUE(product_name)
OVER(
ORDER BY price
) lowest_price
FROM
products;
这是结果集:
在这个例子中:
- 由于我们跳过了
FIRST_VALUE()
函数中的PARTITION BY
子句,因此该函数将整个结果集视为单个分区。 ORDER BY
子句按价格从低到高对产品进行排序。FIRST_VALUE()
函数应用于整个结果集,并选取第一行中product_name
列的值。
2) 在分区上使用 FIRST_VALUE()
函数的示例
该语句使用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;
在这个例子中:
PARTITION BY
子句按产品组分配产品。ORDER BY
子句按价格从低到高对每个产品组(分区)中的产品进行排序。RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
子句定义了每个分区中的框架,从第一行开始到最后一行结束。FIRST_VALUE()
函数分别应用于每个分区。
在本教程中,您学习了如何使用 PostgreSQL 的FIRST_VALUE()
函数,返回结果集排序分区中的第一个值。
了解更多
PostgreSQL 教程:窗口函数
PostgreSQL 文档:窗口函数