八月 27, 2023
摘要:在本教程中,您将学习如何使用 PostgreSQL 的NTH_VALUE()
函数,从结果集中的第 n 行获取值。
目录
PostgreSQL NTH_VALUE()
函数介绍
NTH_VALUE()
函数返回结果集有序分区中第 n 行的值。
NTH_VALUE()
函数的语法如下:
NTH_VALUE(expression, offset)
OVER (
[PARTITION BY partition_expression]
[ ORDER BY sort_expression [ASC | DESC]
frame_clause ]
)
让我们详细研究一下NTH_VALUE()
函数的语法。
expression
expression
是NTH_VALUE()
函数操作的目标列或表达式。
offset
offset
是一个正整数(大于零),用于确定相对于表达式计算所依据的窗口中第一行的行号。
PARTITION BY partition_expression
PARTITION BY
子句将结果集的行分配到NTH_VALUE()
函数应用的分区中。
ORDER BY sort_expression
ORDER BY
子句对应用该函数的每个分区中的行进行排序。
frame clause
frame_clause
定义当前分区的子集(或框架)。
PostgreSQL NTH_VALUE()
函数示例
我们将使用窗口函数教程中创建的products
表进行演示。
1) 在结果集上使用 NTH_VALUE()
函数的示例
此示例使用NTH_VALUE()
函数返回所有产品以及第二昂贵的产品:
SELECT
product_id,
product_name,
price,
NTH_VALUE(product_name, 2)
OVER(
ORDER BY price DESC
RANGE BETWEEN
UNBOUNDED PRECEDING AND
UNBOUNDED FOLLOWING
)
FROM
products;
这是输出:
在这个例子中:
ORDER BY
子句将所有产品按价格从高到低排序。- 框架子句定义框架从结果集的开始行开始,到结果集的结束行结束。
- 函数
NTH_VALUE()
返回排序和组帧后结果集第二行的product_name
列中的值。
2) 在分区示例上使用 NTH_VALUE()
函数的示例
此示例使用NTH_VALUE()
函数返回每个产品组中第二昂贵产品的所有产品:
SELECT
product_id,
product_name,
price,
group_id,
NTH_VALUE(product_name, 2)
OVER(
PARTITION BY group_id
ORDER BY price DESC
RANGE BETWEEN
UNBOUNDED PRECEDING AND
UNBOUNDED FOLLOWING
)
FROM
products;
下图说明了输出:
在这个例子中,
PARTITION BY
子句将产品分发到由group_id
列中的值指定的产品组(或分区)中。ORDER BY
子句对每个产品组中的产品从高到低进行排序。- 框架子句将整个分区定义为框架。
NTH_VALUE()
函数返回每个产品组第二行的产品名称。
现在,您已经知道了如何使用 PostgreSQL 的NTH_VALUE()
函数,从结果集的第 n 行获取值。
了解更多
PostgreSQL 教程:窗口函数
PostgreSQL 文档:窗口函数