单个查询中 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 子集的函数的最大值?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置子查询以获取具有最新日期和最大 ID 的单个记录?

如何使用单个 SQL 查询查找每列的最大值

SQL分组查询最大值最小值

SQl查询最大总和[重复]

如何在单个报告中组合计算最大值的两个查询

聚合函数