📜  PostgreSQL – NTH_VALUE函数(1)

📅  最后修改于: 2023-12-03 15:03:49.393000             🧑  作者: Mango

PostgreSQL – NTH_VALUE函数

在 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 列的值。