Actualmente estoy trabajando en una tarea que requiere una selección que extrae un elemento que contiene un atributo específico de valor máximo en comparación con todos los demás registros. He leído una serie 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 con los operadores básicos. ¿Cómo se selecciona el atributo que contiene un valor máximo?Agregado álgebra relacional (máximo)
Respuesta
Puede expresar funciones agregadas con solo operadores básicos. Es una cosa bonita.
Supongamos que tenemos una tabla T, y nos gustaría encontrar el máximo de su campo de "valor". En primer lugar, 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 redirecciona 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.
Lamentablemente no tengo ni idea de cómo insertar látex aquí, pero usando la notación de álgebra relacional, que 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 de conjuntos, σ 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áctica:
SELECT T.* FROM T LEFT JOIN T as T2 ON T.value<T2.value WHERE T2.value IS NULL
Por supuesto, todo esto es en su mayoría sólo de interés académico, es decir, que muestra que el álgebra relacional funciona.
max(columnname)
devolverá el valor más alto en la columna columnname.
Entiendo la idea de la función máxima. Más bien, no veo cómo podría reemplazar una llamada a max() con una serie de operadores relacionales básicos. En otras palabras, ¿cómo podría realizar max() llamando solo a SELECT, UNION, etc.? – XBigTK13X
@ XBigTK13X No puedes. –
@Dave, entonces le sugiero que mire de cerca la respuesta 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));
El código corresponde con winRDBI, el campo es el atributo que desea comparar para obtener el valor máximo. La tabla es la tabla original donde está ese campo.
Supongamos que tenemos la tabla T con atributos a1, a2, ..., an, v y tenemos que encontrar la fila en la que atribuyen v ha comparado el valor máximo a todas las otras filas.
En primer lugar, necesitamos un producto vectorial de T y T'(una copia de T, donde v fue renombrado a v1) para que podamos comparar los valores de v:
T x ρ{a1, a2, ..., an, v1}T
en segundo lugar, seleccione las filas donde v < v1, y tenemos todas las filas cuyos v valor es menor que el valor v en al menos otra fila. Éstas son las filas que necesitamos para excluir más adelante:
σ{v < v1}(T x ρ{a1, a2, ..., an, v1}T)
luego proyectar las columnas con los atributos originales de T (nombres de columna) por lo que tenemos una tabla con el esquema de T, que contiene todas las filas no deseados, que deben ser excluidos de T en el siguiente paso:
π{a1, a2, ..., an, v}(σ{v < v1}(T x ρ{a1, a2, ..., an, v1}T))
pasado, excluye las filas no deseados de T y obtenemos la fila con el valor máximo v:
T - π{a1, a2, ..., an, v}(σ{v < v1}(T x ρ{a1, a2, ..., an, v1}T))
(trabajé esto en base a la respuesta del SAT y las pruebas con Stanford de línea RA course, ya que no entendía muy bien la notación de la SAT, puse la solución en mi notación aquí, en el que las condiciones del operador están en {}. Espero que pueda ayudar a alguien en el futuro)
permite que tenemos una relación con un atributo A y valores 1,2,3
A
1
2
3
por lo que ahora ..
valores del proyecto A y cambiar el nombre de la A1
A1
1
2
3
de nuevo valores un proyecto y cambiar el nombre con A2
A2
1
2
3
únete a esto con A2<A1
i.e \join_{A2<A1}
por lo que el - esquema de salida: (entero A2, A1 número entero)
A2<A1
1|2
1|3
2|3
escuchar siempre los valores A2 será inferior a A1 debido a que join
de esa manera (a2<a1
)
ahora proyectan A2 la salida es como a continuación
A2
1
2
ahora diff con el atributo original de
A diff A2
A
1
2
3
diff
A2
1
2
de salida es 3
que es el máximo valor
Hola, sé que alguien tiene que ayudar en la edición, para una mejor apariencia
\project_{Att}Relation
\diff
\project_{A2}(\rename_{A2}(\project_{Att}Relation)
\join_{A2<A1}
\rename_{A1}(\project_{Att}Relation))
- 1. Selección de filas DISTINCT en álgebra relacional
- 2. álgebra relacional en lugar de SQL
- 3. Características del lenguaje para implementar el álgebra relacional
- 4. equivalente de álgebra relacional de SQL "NO EN"
- 5. Cómo recuperar valores distintos con arel/álgebra relacional
- 6. ¿Qué podría ser esto: Nuevo lenguaje de consulta encadenable Active Record construido sobre álgebra relacional?
- 7. Álgebra relacional: ¿cuál es la forma correcta de representar una cláusula 'teniendo'?
- 8. Haskell álgebra lineal?
- 9. Cálculo relacional de Tuple
- 10. desempeño agregado
- 11. Definición de un módulo de álgebra usando el paquete constructivo-álgebra
- 12. Programación Relacional/Lógica en Python?
- 13. campo relacional y el desarrollo
- 14. ¿Qué es la parametricidad relacional?
- 15. Introducción a los sistemas de álgebra computarizada?
- 16. biblioteca para cálculos afines de k-álgebra?
- 17. Biblioteca lineal de álgebra para Android
- 18. Monoide conmutativo del paquete 'álgebra' en Hackage
- 19. Biblioteca lineal de álgebra para Javascript?
- 20. Scala LMS para escribir álgebra lineal Lib
- 21. Libros y recursos para enseñarme Álgebra lineal
- 22. Estadística y álgebra matricial en Ruby
- 23. Biblioteca de álgebra lineal para Scala?
- 24. Construyendo un sistema de álgebra computarizada
- 25. DBContext Evento agregado/adjunto?
- 26. Agregado() ejemplo en R
- 27. agregado/suma con ggplot
- 28. Agregado con Mongoid
- 29. copia de tabla relacional de datos
- 30. ElevateDB modelo relacional hacer y no hacer
¿te importaría ayudarme en este http://stackoverflow.com/questions/30378663/mysql-querying-aggregate-of-non-overlapping-dates? – exodream