如何通过关系代数找到MAX?

使用数据库,如何使用关系代数找到MAX?     
已邀请:
假设你有一个关系,A,有一个属性,'a'(减少一个更复杂的关系,这是关系代数中的一个简单的任务,我相信你到目前为止),所以现在你想找到最大值A中的值 一种方法是找到A与自身的交叉产品,确保重命名为'a',以便新关系具有不同名称的属性。例如: (将'a'重命名为'a1')X(将'a'重命名为'a2') 现在选择'a1'< 'a2',结果关系将包含除最大值之外的所有值。要获得最大值,只需找到原始关系之间的差异:
(A x A) - (select 'a1' < 'a2') ((rename 'a' as 'a1')(A) x (rename 'a' as 'a2')(A))
然后使用
project
运算符减少到单列,正如Tobi Lehman在下面的评论中所建议的那样。 用关系代数表示法写这个(如果我没记错的话)。请注意,最终重命名(即ρ)只是以与原始关系中的名称相同的属性结束: ρa/ a1(πa1((A×A) - σa1&lt; a2(ρa1/ a(A)xρa2/ a(A))))     
只是我的两分钱,因为我今天试图解决这个问题。 假设我们有A = 1,2,3 如果你使用
A x A - (select 'a1' < 'a2') ((rename 'a' as 'a1')(A) x (rename 'a' as 'a2')(A))
你不会得到单个最大值而是两个列,如1 | 1,2 | 1,3 | 2,3 | 1,3 | 2,3 | 3 获得3的方法是
project(a)A - project(a1)((select 'a1' < 'a2') ((rename 'a' as 'a1')(A) x (rename 'a' as 'a2')(A)))
至少这是我在类似情况下必须做的事情。 希望它可以帮助某人     
我们认为我们与属性A和值1,2,3有关系
A

1
2
3
所以现在...... 项目A值并使用A1重命名
A1
1
2
3
再次 project A值并使用A2重命名
A2
1
2
3
加入
A2<A1
join_{A2<A1}
所以 - 输出架构:(A2整数,A1整数)
A2<A1

1|2
1|3
2|3
总是听到A2的值会小于A1,因为我们
join
就像那样(
a2<a1
) 现在项目A2的输出如下
A2
1
2
现在diff与原始属性
A diff A2
A
1
2
3
 diff
A2
1
2
输出为
3
这是最大值 嗨,我知道有人必须帮助编辑,以便更好看     
我现在已经忘记了大部分关系代数语法。只使用
SELECT
PROJECT
MINUS
RENAME
的查询
SELECT v1.number
FROM values v1
MINUS
SELECT v1.number
FROM values v1 JOIN values v2 ON v2.number > v1.number
希望你能翻译!     
我知道这是旧的,但这是一个手写的公式,可能很方便! 关系A:1,2,3,4
1. First we want to PROJECT and RENAME relation A
2. We then to a THETA JOIN with the test a1<a2
3. We then PROJECT the result of the relation to give us a single set of values 
   a1: 1,2,3 (not max value since a1<a2)

4. We then apply the difference operator with the original relation so: 
   1,2,3,4 --- 1,2,3 returns 4

   4 is the Max value.
    
找到MAX: 战略: 找到那些不是
MAX
x
。 将
A
关系重命名为
d
,以便我们可以将每个
A
x
与其他所有人进行比较。 使用
set difference
找到前面步骤中找不到的那些
A
x
。 查询是:     
 Project x(A) - Project A.x
(Select A.x < d.x (A x Rename d(A)))
    

要回复问题请先登录注册