reunion resueltos restriccion relacional pruebas producto ppt natural interseccion historia ejercicios ejemplo con cartesiano sql aggregate aggregate-functions max relational-algebra

sql - resueltos - Álgebra Relacional Agregada(Máximo)



pruebas con algebra relacional (5)

Muy bien puede expresar funciones agregadas con solo operadores básicos. Es una cosa muy bonita.

Supongamos que tenemos una tabla T, y nos gustaría encontrar el máximo de su campo "valor". Primero, debemos tomar el producto cartesiano de T consigo mismo, o más bien con una copia de sí mismo, T2. Luego seleccionamos las filas donde T.value es más pequeño que T2.value: esto nos conecta a todas las filas no deseadas , cuyo valor es menor que el valor de alguna otra fila. Para obtener los valores máximos, debemos restar estas filas no deseadas del conjunto de todas las filas. Y eso es. Al menos esa es la idea básica, también necesitamos usar proyecciones para obtener las dimensiones correctas.

Desafortunadamente, no tengo idea de cómo insertar látex aquí, pero al usar la notación de álgebra relacional, sería algo como esto:

π(T.a1...Tan, T.value)(T) - π(T.a1...Tan, T.value)( σ(T.value<T2.value)( ρ(T, T2) x T ) )

donde π es el operador de proyección, - es la diferencia establecida, σ es el operador de selección y ρ es el operador de cambio de nombre.

SQLishly:

SELECT T.* FROM T MINUS SELECT T.* FROM T, T as T2 WHERE T.value<T2.value

Y más prácticamente:

SELECT T.* FROM T LEFT JOIN T as T2 ON T.value<T2.value WHERE T2.value IS NULL

Por supuesto, todo esto es principalmente de interés académico, es decir, muestra que el álgebra relacional funciona .

Actualmente estoy trabajando en una tarea que requiere que se produzca una selección que extraiga un elemento que contenga un atributo específico de valor máximo en comparación con todos los demás registros. He leído un número de fuentes en línea que hacen referencia a una función de álgebra relacional "agregada" llamada máxima, pero no describen cómo funciona utilizando los operadores básicos. ¿Cómo se selecciona el atributo que contiene un valor máximo?


Supongamos que tenemos la tabla T con los atributos a1, a2, ..., an, v y necesitamos encontrar la fila donde el atributo v tiene el valor máximo en comparación con todas las demás filas.

Primero, necesitamos un producto cruzado de T y T ''(una copia de T donde v cambió el nombre a v1 ) para poder comparar los valores de v :

T x ρ{a1, a2, ..., an, v1}T

Segundo, seleccione las filas donde v < v1 , y obtendremos todas las filas cuyo valor v sea ​​menor que el valor v en al menos otra fila. Estas son las filas que debemos excluir más adelante:

σ{v < v1}(T x ρ{a1, a2, ..., an, v1}T)

Luego proyecte las columnas con los atributos originales de T (nombres de columna) para que tengamos una tabla con el esquema de T, que contenga todas las filas no deseadas, que se excluirán de T en el siguiente paso:

π{a1, a2, ..., an, v}(σ{v < v1}(T x ρ{a1, a2, ..., an, v1}T))

Por último, excluya las filas no deseadas de T y obtenemos la fila con el valor v máximo:

T - π{a1, a2, ..., an, v}(σ{v < v1}(T x ρ{a1, a2, ..., an, v1}T))

(Resolví esto en base a la respuesta y las pruebas de SaT con el curso de RA en línea de Stanford, ya que no entendía realmente la notación de SaT, pongo la solución en mi notación aquí, en la que las condiciones del operador están en {}. Espero que pueda ayudar alguien en el futuro)


pensemos que tenemos una relación con un atributo A y valores 1,2,3

A 1 2 3

y ahora..

El proyecto A valora y renombra con A1

A1 1 2 3

de nuevo el proyecto A valora y renombra con A2

A2 1 2 3

unir esto con A2<A1 ie /join_{A2<A1}
por lo que el - Esquema de salida: (entero A2, 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 el proyecto A2 la salida es como abajo

A2 1 2

ahora difieren con el 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 ver mejor

/project_{Att}Relation /diff /project_{A2}(/rename_{A2}(/project_{Att}Relation) /join_{A2<A1} /rename_{A1}(/project_{Att}Relation))


max( columnname ) devolverá el valor más alto en la columna nombre de columna.


table1:= project field (table); table2 (fieldrenamed):= project field (table); Producted:=table1 mult table2; minors:= select fild<fieldrenamed (producted); result:=table1 difference (project field(minors));

El código corresponde con winRDBI, campo es el atributo que desea comparar para obtener el valor máximo. La tabla es la tabla original donde está ese campo.