我目前正在处理一项家庭作业,该作业需要进行选择,以提取包含与所有其他记录相比具有最大值的特定属性的元素。我在网上阅读了许多引用资料,这些资料引用了一个称为最大值的“聚合”关系代数函数,但它们没有描述它如何使用基本运算符工作。如何选择包含最大值的属性?
最佳答案
仅使用基本运算符就可以很好地表达聚合函数。这是一件非常整洁的事情。
假设我们有一个表 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 )
)
其中 π 是投影算子,- 是集合差,σ 是选择算子,ρ 是重命名算子。
沙哑地:
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
当然,所有这些主要只是学术兴趣,即它表明关系代数有效。
关于sql - 聚合关系代数(最大值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4952451/