我目前正在完成一项作业任务,需要进行选取并提取一个包含特定属性最大值的元素,与所有其他记录进行比较。我阅读了许多在线资源,其中提到了一个名为“maximum”的“聚合”关系代数函数,但它们没有使用基本运算符描述其工作原理。如何选择包含最大值的属性?
我目前正在完成一项作业任务,需要进行选取并提取一个包含特定属性最大值的元素,与所有其他记录进行比较。我阅读了许多在线资源,其中提到了一个名为“maximum”的“聚合”关系代数函数,但它们没有使用基本运算符描述其工作原理。如何选择包含最大值的属性?
π(T.a1...Tan, T.value)(T)
-
π(T.a1...Tan, T.value)(
σ(T.value<T2.value)( ρ(T, T2) x T )
)
其中π是投影运算符,-是集合差运算符,σ是选择运算符,ρ是重命名运算符。
类SQL语言:
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
当然,所有这些大多只是学术性兴趣,也就是表明关系代数起作用的事实。
T x ρ{a1, a2, ..., an, v1}T
其次,选择v < v1的行,并获取所有v值小于至少一行中的v值的行。这些是我们稍后需要排除的行:
σ{v < v1}(T x ρ{a1, a2, ..., an, v1}T)
然后使用T的原始属性(列名)投影列,这样我们就可以得到一个具有T模式的表格,包含所有不需要的行,这些行将在下一步中从T中排除:
π{a1, a2, ..., an, v}(σ{v < v1}(T x ρ{a1, a2, ..., an, v1}T))
T - π{a1, a2, ..., an, v}(σ{v < v1}(T x ρ{a1, a2, ..., an, v1}T))
我是根据SaT的答案和使用Stanford在线RA课程进行测试来解决这个问题的。由于我不太理解SaT的符号表示法,因此我在这里使用了自己的符号表示法来呈现解决方案,其中运算符条件用{}表示。希望能对未来的某些人有所帮助。
table1:= project field (table);
table2 (fieldrenamed):= project field (table);
Producted:=table1 mult table2;
minors:= select fild<fieldrenamed (producted);
result:=table1 difference (project field(minors));
代码与winRDBI相对应,字段是您想要比较以获取最大值的属性。表是该字段所在的原始表。
假设我们有一个带有属性A和值1、2、3的关系
A
1
2
3
现在..
将项目A的值重命名为A1
A1
1
2
3
再次使用项目A的值并将其重命名为A2
A2
1
2
3
A2<A1
连接起来,即\join_{A2<A1}
A2<A1
1|2
1|3
2|3
听说A2的值总是小于A1的,因为我们像这样进行了join
(a2<a1
)
现在项目A2的输出如下:
A2
1
2
现在与原始属性不同
A diff A2
A
1
2
3
diff
A2
1
2
输出是 3
,它是最大值
嗨,我知道有人需要帮忙编辑,以获得更好的外观
\project_{Att}Relation
\diff
\project_{A2}(\rename_{A2}(\project_{Att}Relation)
\join_{A2<A1}
\rename_{A1}(\project_{Att}Relation))
max(columnname)
会返回列columnname中的最高值。