我目前正在从事一项作业分配,需要进行选择,该选择会抽出一个元素,该元素包含一个与所有其他记录相比具有最大值的特定属性。我已经在线阅读了许多资料,这些资料引用了称为“最大值”的“聚合”关系代数函数,但是它们没有描述它如何使用基本运算符来工作。如何选择包含最大值的属性?
仅使用基本运算符就可以很好地表达聚合函数。这是一件很整洁的事情。
假设我们有一个表T,我们想找到其“值”字段的最大值。首先,我们应该将T的笛卡尔积与自身- 或更确切地说,将其与副本T2进行比较。然后,我们选择T.value小于T2.value的行:这将为我们排除所有 不需要的 行,这些行的值小于某些其他行的值。为了获得最大值,我们应该从所有行集中减去这些不需要的行。就是这样。至少这是基本思想,我们还需要使用投影来正确确定尺寸。
不幸的是,我不知道如何在此处插入Latex,但是使用关系代数表示法,可能是这样的:
蟺(T.a1...Tan, T.value)(T) - 蟺(T.a1...Tan, T.value)( 蟽(T.value<T2.value)( 蟻(T, T2) x T ) )
其中蟺是投影算子,-是集合差,蟽是选择算子,而ant是重命名算子。
SQLishly:
SELECT T.* FROM T MINUS SELECT T.* FROM T, T as T2 WHERE T.value<T2.value
更实际的是:
SELECT T.* FROM T LEFT JOIN T as T2 ON T.value<T2.value WHERE T2.value IS NULL
当然,所有这些主要只是学术上的兴趣,即表明关系代数是 有效的 。