Je travaille actuellement sur une tâche qui nécessite une sélection qui extrait un élément contenant un attribut spécifique de valeur maximale par rapport à tous les autres enregistrements. J'ai lu un certain nombre de sources en ligne qui font référence à une fonction d'algèbre relationnelle «agrégée» appelée maximum, mais elles ne décrivent pas comment cela fonctionne en utilisant les opérateurs de base. Comment sélectionner l'attribut contenant une valeur maximale?Algèbre relationnelle agrégée (maximum)
Répondre
Vous pouvez très bien exprimer des fonctions d'agrégat avec seulement des opérateurs de base. C'est une jolie chose. Supposons que nous ayons une table T, et nous aimerions trouver le maximum de son champ "valeur". D'abord, nous devrions prendre le produit cartésien de T avec lui-même - ou plutôt avec une copie de lui-même, T2. Ensuite, nous sélectionnons les lignes où T.value est plus petit que T2.value: ceci nous filme toutes les lignes non désirées, dont la valeur est inférieure à la valeur d'une autre ligne. Pour obtenir les valeurs maximales, nous devrions soustraire ces lignes indésirables de l'ensemble de toutes les lignes. Et c'est tout. Au moins c'est l'idée de base, nous devons également utiliser des projections pour obtenir les bonnes dimensions.
Malheureusement, je ne sais pas comment insérer latex, mais en utilisant la notation de l'algèbre relationnelle, ce serait quelque chose comme ceci:
π(T.a1...Tan, T.value)(T)
-
π(T.a1...Tan, T.value)(
σ(T.value<T2.value)(ρ(T, T2) x T)
)
où π est l'opérateur de projection, - est la différence de jeu, σ est l'opérateur de sélection et ρ est l'opérateur de changement de nom.
SQLishly:
SELECT T.* FROM T
MINUS
SELECT T.* FROM T, T as T2 WHERE T.value<T2.value
Et plus pratique:
SELECT T.* FROM T LEFT JOIN T as T2 ON T.value<T2.value WHERE T2.value IS NULL
Bien sûr, tout cela est surtout un intérêt théorique seulement, à savoir qu'il montre que l'algèbre relationnelle fonctionne.
max(columnname)
retournera la valeur la plus élevée dans la colonne nom de colonne.
Je comprends l'idée de la fonction maximale. Au contraire, je ne vois pas comment je pourrais remplacer un appel à max() par une série d'opérateurs relationnels de base. En d'autres termes, comment pourrais-je effectuer max() en appelant seulement SELECT, UNION, etc? – XBigTK13X
@ XBigTK13X Vous ne pouvez pas. –
@Dave alors je vous suggère de regarder de très près la réponse de 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));
code correspondent à winRDBI, le champ est l'attribut que vous voulez comparer pour obtenir la valeur maximale. Table est la table d'origine où ce champ est.
Supposons que nous ayons la table T avec des attributs a1, a2, ..., un, v et nous devons trouver la ligne où l'attribut v a la valeur maximale par rapport à toutes les autres lignes.
Tout d'abord, nous avons besoin d'un produit croisé de T et T »(une copie de T où v a été renommé v1) afin que nous puissions comparer les valeurs de v:
T x ρ{a1, a2, ..., an, v1}T
Ensuite, sélectionnez les lignes où v < v1, et nous obtenons toutes les lignes dont v valeur est inférieure à la v valeur dans au moins une autre rangée. Ce sont les lignes que nous devons exclure plus tard:
σ{v < v1}(T x ρ{a1, a2, ..., an, v1}T)
projet a ensuite les colonnes avec des attributs originaux de T (nom de colonne) nous avons donc une table avec le schéma de T, contenant toutes les lignes non désirées, qui doivent être exclues de T à l'étape suivante:
π{a1, a2, ..., an, v}(σ{v < v1}(T x ρ{a1, a2, ..., an, v1}T))
dernier, ne comprennent pas les lignes indésirables de T et nous obtenons la ligne avec un maximum v valeur:
T - π{a1, a2, ..., an, v}(σ{v < v1}(T x ρ{a1, a2, ..., an, v1}T))
(j'ai travaillé ce sur la base de la réponse de SaT et de test avec Stanford en ligne RA course, puisque je ne comprenais pas vraiment la notation de SaT, je mets la solution dans ma notation ici, dans laquelle les conditions de l'opérateur sont {}. Je espère que ça peut aider quelqu'un à l'avenir)
laisse penser que nous avons une relation avec un attribut A et valeurs 1,2,3
A
1
2
3
maintenant ..
projet de valeurs et renommer avec A1
A1
1
2
3
nouveau projet, une des valeurs et renommer avec A2
A2
1
2
3
joindre cela avec A2<A1
i.e \join_{A2<A1}
de sorte que le - schéma de sortie: (entier A2, entier A1)
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
)
projettent maintenant A2 la sortie est comme ci-dessous
A2
1
2
maintenant diff avec l'attribut d'origine
A diff A2
A
1
2
3
diff
A2
1
2
sortie est 3
qui est la valeur maximale
Salut, je sais que quelqu'un doit aider à l'édition, pour mieux regarder
- 1. Algèbre relationnelle
- 2. algèbre relationnelle naturel rejoindre
- 3. algèbre relationnelle requêtes
- 4. De algèbre relationnelle SQL
- 5. Scala DBs? Algèbre relationnelle?
- 6. Algèbre relationnelle: question de parenthèse
- 7. Algèbre relationnelle - Sélectionner sans prédicat
- 8. algèbre relationnelle pour l'opérateur limite
- 9. algèbre relationnelle et SQL résolution
- 10. Vérifier mon algèbre relationnelle contre SQL?
- 11. algèbre relationnelle au lieu de SQL
- 12. Représenter une sous-requête en algèbre relationnelle
- 13. algèbre relationnelle: sélectionnez uniquement dernière tentative,
- 14. Aide pour traduire la requête SQL en algèbre relationnelle
- 15. manière différente de l'écriture intersection en algèbre relationnelle
- 16. Comment convertir une commande Sql en algèbre relationnelle?
- 17. comment écrire une expression algèbre relationnelle pour la requête suivante?
- 18. algèbre relationnelle au convertisseur SQL ou vice versa
- 19. sql -> l'algèbre relationnelle
- 20. algèbre relationnelle - Liste les noms des employés qui ne travaillent pas dans le projet 1
- 21. Syntaxe d'algèbre relationnelle
- 22. Algèbre: ajouter deux matrices
- 23. Algèbre linéaire Haskell?
- 24. booléenne simplification Algèbre
- 25. C++ Algèbre booléenne
- 26. algèbre convertisseur html
- 27. Algèbre de Boole - Théorèmes
- 28. Mesure non agrégée dans un cube OLAP
- 29. Une racine agrégée peut-elle faire référence à une racine non agrégée d'une autre racine agrégée?
- 30. Bases de données Optimisation de l'algèbre relationnelle
cela vous dérangerait-il de m'aider sur ce point http://stackoverflow.com/questions/30378663/mysql-querying-aggregate-of-non-overlapping-dates? – exodream