Подтвердить что ты не робот

Как я могу найти MAX с реляционной алгеброй?

Работа с базами данных, как я могу найти MAX с помощью реляционной алгебры?

4b9b3361

Ответ 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

Я знаю, что это старо, но вот рукописная формула, которая может быть удобной!

enter image description here

Отношение 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:

  • Стратегия:

    • Найдите те x, которые не являются MAX.

      • Переименуйте A отношение как d, чтобы мы могли сравнить каждый A x со всеми другими.
    • Используйте set difference, чтобы найти те A x, которые не были найдены на предыдущем шаге.

  • Запрос: введите описание изображения здесь