Работа с базами данных, как я могу найти MAX с помощью реляционной алгебры?
Как я могу найти MAX с реляционной алгеброй?
Ответ 1
Предполагая, что у вас есть отношение, A, с одним атрибутом, 'a' (сокращение более сложного отношения к этому - простая задача в реляционной алгебре, я уверен, что вы так далеко), так что теперь вы хотите найти максимальное значение в A.
Один из способов сделать это - найти кросс-произведение A с собой, обязательно переименуйте 'a', чтобы ваше новое отношение имело атрибуты с разными именами. например:
(переименуйте 'a' как 'a1') X (переименуйте 'a' как 'a2')
теперь выберите 'a1'<'a2', полученное соотношение будет иметь все значения, кроме максимума. Чтобы получить max, просто найдите разницу между исходным соотношением:
(A x A) - (select 'a1' < 'a2') ((rename 'a' as 'a1')(A) x (rename 'a' as 'a2')(A))
Затем используйте оператор project
, чтобы уменьшить до одного столбца, как предлагает Тоби Леман в комментарии ниже.
Написание этого в нотации реляционной алгебры было бы (если я правильно помню). Обратите внимание, что окончательное переименование (т.е. Р) состоит только в том, чтобы в итоге получить атрибут, который имеет то же имя, что и в исходном отношении:
p a/a1 (π a1 ((A x A) - σ a1 < a2 (ρ a1/a (A) x ρ a2/a (A))))
Ответ 2
Только мои два цента, как я сам пытался решить это сегодня.
Допустим, что A = 1,2,3
Если вы используете
A x A - (select 'a1' < 'a2') ((rename 'a' as 'a1')(A) x (rename 'a' as 'a2')(A))
вы не получите единственное максимальное значение, а не два столбца, такие как 1 | 1, 2 | 1,3 | 2,3 | 1,3 | 2,3 | 3
способ получить только 3
project(a)A - project(a1)((select 'a1' < 'a2') ((rename 'a' as 'a1')(A) x (rename 'a' as 'a2')(A)))
По крайней мере, это то, что я должен был делать в подобной ситуации.
Надеюсь, что это поможет кому-то
Ответ 3
Я забыл большую часть синтаксиса реляционной алгебры. Запрос с использованием SELECT
, PROJECT
, MINUS
и RENAME
будет
SELECT v1.number
FROM values v1
MINUS
SELECT v1.number
FROM values v1 JOIN values v2 ON v2.number > v1.number
Надеюсь, вы сможете перевести!
Ответ 4
позволяет думать, что мы имеем отношение с атрибутом A и значениями 1,2,3
A
1
2
3
так что теперь..
project A и переименовать с A1
A1
1
2
3
снова project A и переименовать с A2
A2
1
2
3
присоедините это к A2<A1
i.e \join_{A2<A1}
так что - Схема вывода: (целое A2, целое число A1)
A2<A1
1|2
1|3
2|3
всегда слышать значения A2 будут меньше, чем A1, потому что мы join
как это (A2<A1
)
теперь проект A2, выход выглядит как ниже
A2
1
2
теперь diff с исходным атрибутом
A diff A2
A
1
2
3
diff
A2
1
2
Вывод 3
которое является максимальным значением
Привет, я знаю, что кто-то должен помочь в редактировании, чтобы лучше выглядеть
Ответ 5
Я знаю, что это старо, но вот рукописная формула, которая может быть удобной!
Отношение 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.
Ответ 6
Project x(A) - Project A.x
(Select A.x < d.x (A x Rename d(A)))
Ответ 7
Найти MAX: