oraclesql嵌套max函数

oraclesql嵌套max函数,sql,oracle,Sql,Oracle,我试图创建一个函数,它以数字形式返回所有项之间的最大距离。 我理解它应该像一个嵌套的for循环,我在查询嵌套方面遇到了问题 我有一张桌子: create table MediaItems ( MID NUMBER(9,0), TITLE VARCHAR2 (200), PROD_YEAR NUMBER(4), TITLE_LENGTH NUMBER(4), CONSTRAINT mid_pk PRIMARY KEY (MID) ); 我需要返回所有项目对之间距离计算的最大结

我试图创建一个函数,它以数字形式返回所有项之间的最大距离。 我理解它应该像一个嵌套的for循环,我在查询嵌套方面遇到了问题

我有一张桌子:

create table MediaItems (
  MID NUMBER(9,0),
  TITLE VARCHAR2 (200),
  PROD_YEAR NUMBER(4),
  TITLE_LENGTH NUMBER(4),
  CONSTRAINT mid_pk PRIMARY KEY (MID)
);
我需要返回所有项目对之间距离计算的最大结果。距离是给定项目的生产年份(生产年份)之间的平方差


如果您能提供有关如何嵌套查询的任何帮助/建议,我将不胜感激。

交叉联接应该可以做到这一点-它将每个项与其他项配对,从而提供您想要的“嵌套循环”效果

SELECT     MAX(POWER(a.prod_year - b.prod_year), 2)
FROM       MediaItems a
CROSS JOIN MediaItems b

对于您的特定计算——假设所有值均为正值——只需将最小值和最大值之间的差值平方即可:

select power(max(prod_year) - min(prod_year), 2)
from mediaitems mi;

这很容易修改以处理负值,但在名为
prod_year

的列中,这似乎不太可能。当将值与单个维度进行比较时,最大距离仅来自最大和最小元素。任何一对都会给你一个较低的距离,因此在你的表中评估距离的最佳方法是:

SELECT abs(MAX(prod_year) - MIN(prod_year))
FROM MediaItems

如果产品年只有正值,则无需使用abs功能。我不明白你为什么需要一维值的平方差。

我似乎也不太可能认为这一年会是负的,我已经用了你快速简单的解决方案,谢谢!我不确定这里是否有负面影响。你在考虑log()吗?