📅  最后修改于: 2023-12-03 15:03:49.393000             🧑  作者: Mango
在 PostgreSQL 中,NTH_VALUE 函数用于获取某个分区中指定位置的值。该函数可以用于分析等查找第 N 个键值时非常有用。
语法:
NTH_VALUE(expression, n) OVER (
[ PARTITION BY partition_expression, ... ]
ORDER BY sort_expression [ASC | DESC], ...
ROWS BETWEEN start_range AND end_range
)
参数说明:
expression
:用于计算的表达式n
:欲获取的值的位置partition_expression
:分区表达式sort_expression
:排序表达式start_range
:起始范围(默认为 UNBOUNDED PRECEDING)end_range
:结束范围(默认为 CURRENT ROW)返回值类型:与 expression
相同。
示例:
假设有以下的 products
表:
id | product_name | price
----------+--------------+-------
1 | iPhone 12 | 1099
2 | Galaxy S21 | 799
3 | Pixel 5 | 699
4 | OnePlus 9 | 729
5 | Mi 11 Ultra | 899
为了获取价格在第 3 个位置的产品名称,可以使用如下的 SQL 查询语句:
SELECT NTH_VALUE(product_name, 3) OVER (
ORDER BY price DESC
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
) AS third_most_expensive_product
FROM products;
查询结果:
third_most_expensive_product
------------------------------
iPhone 12
该查询语句对 product_name
列进行排序,并使用 ROWS
子句来指定起始范围和结束范围。由于该语句中未指定分区表达式,因此将使用整个数据集。然后,NTH_VALUE 函数返回在排序后排在第三位的 product_name
列的值。