web-dev-qa-db-ja.com

リレーショナル代数でMAXを見つけるにはどうすればよいですか?

データベースを使用して、リレーショナル代数を使用してMAXを見つけるにはどうすればよいですか?

53
Ifiok Idiang

単一の属性 'a'を持つリレーションAがあると仮定します(これへのより複雑なリレーションの削減は、リレーショナル代数の単純なタスクです。これまでのところ得られたと思います)。 Aの値.

それを行う1つの方法は、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が以下のコメントで提案しているように、1列に減らします。

これをリレーショナル代数記法で書くのは正しいでしょう(私が正しく覚えていれば)。最終的な名前変更(つまり、ρ)は、元のリレーションと同じ名前を持つ属性に終わることに注意してください。

ρa/a1(πa1((A x A)-σa1 <a2 (ρa1/a(A)xρa2/a(A))))

70
Dan

今日自分でこれを解決しようとしていたちょうど2セント。

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のような2つの列ではなく、単一の最大値は取得されません。

3つだけを取得する方法は

project(a)A - project(a1)((select 'a1' < 'a2') ((rename 'a' as 'a1')(A) x (rename 'a' as 'a2')(A)))

少なくともそれは私が同じような状況でやらなければならなかったことです。

それが誰かを助けることを願っています

36
idipous

属性Aと値1,2,3との関係があると考えてみましょう

A

1
2
3

だから今..

project Aの値とA1の名前の変更

A1
1
2
3

再びAの値を投影し、A2で名前を変更します

A2
1
2
3

A2<A1でこれに参加します。つまり\join_{A2<A1}
so-出力スキーマ:(A2整数、A1整数)

A2<A1

1|2
1|3
2|3

joinがそのように(a2<a1

現在、プロジェクトA2の出力は以下のようになっています

A2
1
2

元の属性との差分

A diff A2
A
1
2
3
 diff
A2
1
2

出力は3で、最大値です

こんにちは、見栄えを良くするために編集に協力しなければならない人がいます

21
bhv

リレーショナル代数 構文のほとんどを忘れてしまいました。 SELECTPROJECTMINUSおよびRENAMEのみを使用したクエリは、

SELECT v1.number
FROM values v1
MINUS
SELECT v1.number
FROM values v1 JOIN values v2 ON v2.number > v1.number

うまくいけば翻訳できます!

19
Martin Smith

私はこれが古いことを知っていますが、これは便利かもしれない手書きの数式です!

enter image description here

関係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.
5
benscabbia

MAXを見つける:

  • 戦略:

    1. xではないMAXを見つけます。

      • Adを他のすべてと比較できるように、A関係の名前をxに変更します。
    2. つかいます set difference前のステップで見つからなかったAxを見つけます。

  • クエリは次のとおりです。 enter image description here

3
 Project x(A) - Project A.x
(Select A.x < d.x (A x Rename d(A)))
1
Raju