LARGE让您找到数组中的第 n 个最大值。 SMALL让您找到数组中的第 n 个最小值。
我想做类似select SMALL([col1, col2, col3, 2], 2), LARGE([col1, col2, col3, 5], 2) from table1;
我不是在寻找 GREATEST and LEAST FUNCTIONS .我想找到第 n 个最小/最大值,而不是 最小/最大值。
最佳答案
实现很简单:
CREATE OR REPLACE FUNCTION large(anyarray, int)
RETURNS anyelement AS $$
SELECT (ARRAY(SELECT unnest($1) ORDER BY 1 DESC))[$2]
$$ LANGUAGE sql;
postgres=# SELECT large(ARRAY[3,2,1,4,5,0], 2);
┌───────┐
│ large │
╞═══════╡
│ 4 │
└───────┘
(1 row)
对于“小”函数 - 删除 ORDER BY
子句中的 DESC
。
该实现基于 unnest
函数 - 它将数组转换为表格。它按 ORDER BY
子句排序 - 与任何其他表一样。数组构造函数 ARRAY(subselect)
将排序关系转换为数组。
此函数使用多态参数 - 它类似于 C++ 中的模板。使用这些参数,此函数适用于任何数组类型。
关于postgresql - 如何在 Postgres 中实现 excel 的 SMALL 和 LARGE 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42083813/