2

2 つの列の最大差を取得することは可能ですか (たとえば、開始重量と終了重量)?

これには、各行の 2 つの列の差を含む新しい列が必要になるため、現在は no に傾いています。選択操作の条件で算術演算が許可されていないため、当初の意図どおりに実行しても機能しません (たとえば、SIGMA (c1 - c2 < c3 - c4)(Table) は許可されません)。

開示:これは宿題の質問の一部です。

4

2 に答える 2

1

計画どおりに実行できますが、そのためには一般化された投影が必要です。一般化された射影は演算子です

Π(E1, E2,..., En)R

ここで、R はリレーション、E1...En は a⊕b の形式の式です。ここで、a と b は R の属性または定数であり、⊕ はそれらの間の任意の二項演算子です。結果は、属性 E1...En との関係になります。

これにより、違いを新しい関係 (R' := Π(xy)R) に射影し、計画どおりに最大値を見つけることができます。

一般化された射影の使用が許可されていない場合、射影の定義では属性名のみが許可され、選択の定義では属性名のみが許可されているため、属性を別の属性から実際に減算したり、実際にそれらから何かを計算したりする手段はないと思います。 a と b が属性または定数であり、θ が二項関係演算子である形式 aθb の式のみ (これはある意味で論理的です。なぜなら、関係 R(X,Y) がある場合、X または Y の型であり、それらに対する操作はまったく無意味です)。

一般化された射影は、リレーショナル代数の優れた拡張機能だと思います。それは明らかに実生活で非常に有用であり、より科学的な観点からでも擁護することができます: "X > 50" のような値で二項条件演算子を許可する場合、型について既に仮定を行っており、その点をレンダリングしています。つまらない。ただし、インストラクターは同意しない場合があります。

于 2012-02-07T23:46:16.563 に答える
0

現実の世界でこれを実行しようとしている場合は、次のようなサブクエリ(またはビューとほぼ同じ)を使用してこれを実行できるはずです。

select max (diff) from (
    select high - low as diff from blah blah blah
)

これが関係代数の抽象的な世界に当てはまるかどうか、私には言えませんでした。私はそれらの気の現実世界の問題を修正するのに忙しすぎます:-)

于 2012-02-07T02:52:26.073 に答える