单个查询中 id 子集的函数的最大值?
Posted
技术标签:
【中文标题】单个查询中 id 子集的函数的最大值?【英文标题】:max of a max of a function for subset of ids in single query? 【发布时间】:2021-08-08 03:47:05 【问题描述】:如何将以下代码变成单个查询:
节点:id、值
即取回应用于整个表的节点子集的函数最大值的最大值
这是伪代码。 数据库是postgresql
#select the nodes, filtered by some criteria
Nodes = select id,value from nodes where ....
#for every node.value find the max of fun() applied to the whole table, collect it
FOR n IN Nodes :
Maxes.append(
select s.id, MAX(fun(n.value, s.value))
from nodes s
where s.id != n.id
)
#find the Max-score&Id of the collected Max scores
ID,score = MAX(Maxes)
【问题讨论】:
样本数据、所需结果和适当的数据库标签会有所帮助。 那是什么语言?在我看来,它不像 SQL。 【参考方案1】:在 sql 中,您只需调用 max() ,它是一个聚合函数并针对您提供给它的整个数据集运行,因此您的查询将非常简单:
select max(fun(n1.value, n2.value))
from nodes n1
join nodes n2
on n1.id <> n2.id
where ....
当然你需要在你的 postgresl 中提前定义并制作 fun() 函数
【讨论】:
谢谢 .. fun() 返回分数而不是向量。 fun() 取决于两个向量。每个选定节点都有自己的最大分数,从这些最大分数中,我必须选择最大 .. 从某种意义上说,它在循环中的循环 这个连接不是只在“交叉”上做 MAX 吗.. 它必须为每个选定节点将 fun() 应用于整个表一次.. @sten ,然后删除 where 子句。无论如何,问题中提供的信息很少,这似乎回答了问题,否则您必须提供示例数据和所需的输出以及完整的解释以上是关于单个查询中 id 子集的函数的最大值?的主要内容,如果未能解决你的问题,请参考以下文章