database - examples - ¿Cómo puedo encontrar MAX con álgebra relacional?
relational database model (7)
Asumiendo que tienes una relación, A, con un solo atributo, ''a'' (reducir una relación más compleja a esto es una tarea simple en álgebra relacional, estoy seguro de que has llegado hasta aquí), así que ahora quieres encontrar el máximo valor en A.
Una forma de hacerlo es encontrar el producto cruzado de A consigo mismo, asegúrese de renombrar ''a'' para que su nueva relación tenga atributos con nombres distintos. por ejemplo:
(renombra ''a'' como ''a1'') X (renombra ''a'' como ''a2'')
ahora seleccione ''a1'' <''a2'', la relación resultante tendrá todos los valores excepto el máximo. Para obtener el máximo, simplemente encuentre la diferencia entre su relación original:
(A x A) - (select ''a1'' < ''a2'') ((rename ''a'' as ''a1'')(A) x (rename ''a'' as ''a2'')(A))
Luego use el operador del project
para reducir a una sola columna como sugiere Tobi Lehman en el comentario a continuación.
Escribir esto en notación de álgebra relacional sería (si no recuerdo mal). Tenga en cuenta que el cambio de nombre final (es decir, ρ) es solo para terminar con un atributo que tiene el mismo nombre que en la relación original:
ρ a / a1 (π a1 ((A x A) - σ a1 <a2 (ρ a1 / a (A) x ρ a2 / a (A))))
Trabajando con bases de datos, ¿cómo puedo encontrar MAX usando álgebra relacional?
Olvidé la mayoría de la sintaxis de álgebra relacional ahora. Una consulta solo usando SELECT
, PROJECT
, MINUS
y RENAME
sería
SELECT v1.number
FROM values v1
MINUS
SELECT v1.number
FROM values v1 JOIN values v2 ON v2.number > v1.number
¡Espero que puedas traducir!
Sé que esto es viejo, pero aquí hay una fórmula escrita a mano que podría ser útil.
Relación 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.
Solo mis dos centavos mientras intentaba resolver esto yo mismo.
Digamos que tenemos A = 1,2,3
Si utiliza
A x A - (select ''a1'' < ''a2'') ((rename ''a'' as ''a1'')(A) x (rename ''a'' as ''a2'')(A))
no obtendrá el valor máximo único sino dos columnas como 1 | 1, 2 | 1,3 | 2,3 | 1,3 | 2,3 | 3
la forma de obtener solo 3 es
project(a)A - project(a1)((select ''a1'' < ''a2'') ((rename ''a'' as ''a1'')(A) x (rename ''a'' as ''a2'')(A)))
Al menos eso es lo que tenía que hacer en una situación similar.
Espero que ayude a alguien
pensemos que tenemos una relación con un atributo A y valores 1,2,3
A
1
2
3
y ahora..
proyecto A valores y cambiar el nombre con A1
A1
1
2
3
volver a proyectar los valores A y renombrar con A2
A2
1
2
3
únete a esto con A2<A1
ie /join_{A2<A1}
entonces el - Esquema de salida: (A2 entero, A1 entero)
A2<A1
1|2
1|3
2|3
escuchar siempre los valores A2 serán menores que A1 porque nos join
así ( a2<a1
)
ahora proyecto A2, la salida es como a continuación
A2
1
2
ahora diff con atributo original
A diff A2
A
1
2
3
diff
A2
1
2
La salida es 3
que es el valor máximo
Hola, sé que alguien tiene que ayudar en la edición, para una mejor mirada
Project x(A) - Project A.x
(Select A.x < d.x (A x Rename d(A)))