正在使用Postgres 9.3...
有人能解释一下为什么我不能直接在非嵌套数组上使用max函数吗?
我的理解是unnest函数返回一个“setof”,就像select语句一样。那么,为什么这个查询的简短版本不起作用呢?(是我在概念上遗漏了什么,还是我的问题与语法有关?)
table: foo_history:
id | history::smallint
-----------------------------------
1 | {10,20,30,50,40}
这不管用吗?
Select id, max(unnest(history)) as vMax from foo_history;
......但这一个可以......?
WITH foo as (
select id, unnest(history) as history
from foo_history
)
Select
id, max(history) as vMax
From foo
Group by id;
4条答案
按热度按时间y0u0uwnf1#
如果你安装了
intarray
模块,它会提供一些额外的数组运算符,让你可以写你想要的东西,尽管效率有点低:编写数组的最大和最小函数并将其添加到
intarray
是非常容易的,代码非常简单。否则,您可以只编写一个SQL函数:
并使用:
ovfsdjhp2#
在PostgreSQL 9.6和8.4中:
gjmwrych3#
你必须记住,SQL是设计来对数据集进行操作的。MAX函数在第一个例子中实际上是有效的,只是它没有像你期望的那样工作。它将返回匹配的每一行的最大值。
group by子句按预期方式工作,因为您现在要聚合到一个集合中,然后从该集合中获取最大值。:)
2eafrhcq4#
这对我有用
这将在数组中找到max