¿Cómo puedo encontrar MAX con álgebra relacional?

Trabajando con bases de datos, ¿cómo puedo encontrar MAX usando álgebra relacional?

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í), entonces 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 / a1a1 ((A x A) - σ a1 a1 / a (A) x ρ a2 / a (A))))

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

Olvidé la mayoría de la syntax 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!

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 ie \join_{A2
entonces el - Esquema de salida: (A2 entero, A1 entero)

 A2 

escuchar siempre los valores A2 serán menores que A1 porque nos join así ( a2 )

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

Sé que esto es viejo, pero aquí hay una fórmula escrita a mano que podría ser útil.

enter image description here

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 

Encuentra el MAX:

  • Estrategia:

    1. Encuentra esos x que no son el MAX .

      • Cambie el nombre de A relación como d para que podamos comparar cada A x con todas las demás.
    2. Use la set difference para encontrar aquellas A x que no se encontraron en el paso anterior.

  • La consulta es: enter image description here

  Project x(A) - Project Ax (Select Ax < dx (A x Rename d(A)))