admin

总关系代数(最大值)

sql

我目前正在从事一项作业分配,需要进行选择,该选择会抽出一个元素,该元素包含一个与所有其他记录相比具有最大值的特定属性。我已经在线阅读了许多资料,这些资料引用了称为“最大值”的“聚合”关系代数函数,但是它们没有描述它如何使用基本运算符来工作。如何选择包含最大值的属性?


阅读 351

收藏
2021-05-10

共1个答案

admin

仅使用基本运算符就可以很好地表达聚合函数。这是一件很整洁的事情。

假设我们有一个表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

当然,所有这些主要只是学术上的兴趣,即表明关系代数是 有效的

2021-05-10