是否可以获得两列之间的最大差异(例如起始权重和结束权重)?
现在我倾向于否,因为这需要一个新列,其中每行两列之间的差异,然后取最大值。因为在选择操作的条件下不允许进行算术运算(例如,不允许使用 SIGMA (c1 - c2 < c3 - c4)(Table)),所以按照我最初想要的方式进行操作也不起作用。
披露:这是家庭作业问题的一部分。
是否可以获得两列之间的最大差异(例如起始权重和结束权重)?
现在我倾向于否,因为这需要一个新列,其中每行两列之间的差异,然后取最大值。因为在选择操作的条件下不允许进行算术运算(例如,不允许使用 SIGMA (c1 - c2 < c3 - c4)(Table)),所以按照我最初想要的方式进行操作也不起作用。
披露:这是家庭作业问题的一部分。
它可以完全按照您计划的方式完成,但您需要为此进行广义投影。广义投影是算子
Π(E1, E2,..., En)R
其中 R 是关系,E1...En 是 a⊕b 形式的表达式,其中 a 和 b 是 R 的属性或常数,⊕ 是它们之间的任意二元运算符。结果是与属性 E1...En 的关系。
这将允许您将差异投影到一个新的关系 (R' := Π(xy)R) 中,然后按照您的计划找到其中的最大值。
如果我们不允许使用广义投影,那么我认为我们没有办法实际从另一个属性中减去一个属性,或者从它们实际计算任何东西,因为投影的定义只允许属性名称,而选择的定义允许只有 aθb 形式的表达式,其中 a 和 b 是属性或常量,而 θ 是二元关系运算符(这在某种程度上是合乎逻辑的,因为如果我们有关系 R(X,Y),那么我们不知道X 或 Y 的类型,使对它们的操作毫无意义)。
我认为广义投影是关系代数的一个很好的扩展。它显然在现实生活中非常有用,甚至可以从更科学的角度进行辩护:如果我们允许对“X > 50”等值使用二元条件运算符,那么我们已经对类型做出了假设,呈现了这一点有点无意义。不过,你的导师可能不同意。
如果您希望在现实世界中执行此操作,您应该能够使用子查询(或视图,这几乎是相同的事情)来执行此操作,例如:
select max (diff) from (
select high - low as diff from blah blah blah
)
这是否适用于关系代数的抽象世界,我不能说。我正忙着解决那些该死的现实问题:-)