web-dev-qa-db-fra.com

Comment puis-je trouver MAX avec l'algèbre relationnelle?

En travaillant avec des bases de données, comment puis-je trouver MAX en utilisant l'algèbre relationnelle?

53
Ifiok Idiang

En supposant que vous ayez une relation, A, avec un seul attribut, 'a' (réduire une relation plus complexe à cela est une tâche simple en algèbre relationnelle, je suis sûr que vous êtes arrivé jusqu'ici), alors maintenant vous voulez trouver le maximum valeur en A.

Une façon de le faire est de trouver le produit croisé de A avec lui-même, assurez-vous de renommer "a" afin que votre nouvelle relation ait des attributs avec des noms distincts. par exemple:

(renommer "a" en "a1") X (renommer "a" en "a2")

sélectionnez maintenant 'a1' <'a2', la relation résultante aura toutes les valeurs sauf le maximum. Pour obtenir le maximum, il suffit de trouver la différence entre votre relation d'origine:

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

Ensuite, utilisez l'opérateur project pour réduire à une seule colonne comme le suggère Tobi Lehman dans le commentaire ci-dessous.

L'écrire en notation algèbre relationnelle serait (si je me souviens bien). Notez que le renommage final (c'est-à-dire ρ) consiste simplement à se retrouver avec un attribut qui porte le même nom que dans la relation d'origine:

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

70
Dan

Juste mes deux cents alors que j'essayais de résoudre ce problème moi-même aujourd'hui.

Disons que nous avons A = 1,2,3

Si tu utilises

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

vous n'obtiendrez pas la valeur max unique plutôt que deux colonnes comme 1 | 1, 2 | 1,3 | 2,3 | 1,3 | 2,3 | 3

la façon d'en obtenir seulement 3 est

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

C'est du moins ce que j'ai dû faire dans une situation similaire.

J'espère que cela aide quelqu'un

36
idipous

laisse penser que nous avons une relation avec un attribut A et les valeurs 1,2,3

A

1
2
3

alors maintenant..

projetez les valeurs A et renommez avec A1

A1
1
2
3

projeter à nouveau les valeurs A et renommer avec A2

A2
1
2
3

rejoindre ceci avec A2<A1 c'est à dire \join_{A2<A1}
donc le - Schéma de sortie: (A2 entier, A1 entier)

A2<A1

1|2
1|3
2|3

entendre toujours les valeurs A2 seront inférieures à A1 parce que nous join comme ça (a2<a1)

projetez maintenant A2 la sortie est comme ci-dessous

A2
1
2

diff maintenant avec l'attribut d'origine

A diff A2
A
1
2
3
 diff
A2
1
2

La sortie est 3 qui est la valeur maximale

Salut, je sais que quelqu'un doit aider à l'édition, pour un meilleur look

21
bhv

J'ai oublié la plupart de la syntaxe algèbre relationnelle maintenant. Une requête utilisant simplement SELECT, PROJECT, MINUS et RENAME serait

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

J'espère que vous pourrez traduire!

19
Martin Smith

Je sais que c'est vieux, mais voici une formule manuscrite qui pourrait être utile!

enter image description here

Relation 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

Trouvez le MAX:

  • Stratégie:

    1. Recherchez les x qui ne sont pas les MAX.

      • Renommez la relation A en d afin de pouvoir comparer chaque Ax à toutes les autres.
    2. Utilisation set difference pour rechercher les Ax qui n'ont pas été trouvés à l'étape précédente.

  • La requête est: enter image description here

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