В настоящее время я работаю над домашним заданием, которое требует выбора, который вытаскивает элемент, содержащий конкретный атрибут максимального значения по сравнению со всеми другими записями. Я читал несколько источников в Интернете, которые ссылаются на "совокупную" функцию реляционной алгебры, называемую максимальной, но они не описывают, как она работает с использованием основных операторов. Как выбрать атрибут, содержащий максимальное значение?
Агрегатная реляционная алгебра (максимум)
Ответ 1
Вы можете очень хорошо выразить агрегатные функции только с базовыми операторами. Это довольно аккуратная вещь.
Предположим, что у нас есть таблица T, и мы хотели бы найти максимум своего поля "значение". Во-первых, мы должны взять декартово произведение Т с собой - или, вернее, с копией самого себя, Т2. Затем мы выбираем строки, где T.value меньше, чем T2.value: это задает нам все нежелательные строки, значение которых меньше значения какой-либо другой строки. Чтобы получить максимальные значения, мы должны вычесть эти нежелательные строки из набора всех строк. И это так. По крайней мере, что основная идея, нам также нужно использовать проекции, чтобы получить размеры справа.
К сожалению, я понятия не имею, как вставить здесь латекс, но используя нотацию реляционной алгебры, это будет примерно так:
π(T.a1...Tan, T.value)(T)
-
π(T.a1...Tan, T.value)(
σ(T.value<T2.value)( ρ(T, T2) x T )
)
где π - оператор проектирования, - заданная разность, σ - оператор выбора, а ρ - оператор переименования.
SQLishly:
SELECT T.* FROM T
MINUS
SELECT T.* FROM T, T as T2 WHERE T.value<T2.value
И более практично:
SELECT T.* FROM T LEFT JOIN T as T2 ON T.value<T2.value WHERE T2.value IS NULL
Конечно, все это в основном представляет только академический интерес, то есть показывает, что реляционная алгебра работает.
Ответ 2
Предположим, что у нас есть таблица T с атрибутами a1, a2,..., an, v, и нам нужно найти строку, где атрибут v имеет максимальное значение по сравнению со всеми другими строками.
Во-первых, нам нужно перекрестное произведение T и T '(копия T, где v была переименована в v1), поэтому мы можем сравнить значения v
T x ρ{a1, a2, ..., an, v1}T
Во-вторых, выберите строки, где v < v1, и мы получим все строки, значение v меньше, чем значение v, по крайней мере в одной строке. Это строки, которые нам нужно исключить позже:
σ{v < v1}(T x ρ{a1, a2, ..., an, v1}T)
Затем спроектируйте столбцы с исходными атрибутами T (имена столбцов), поэтому у нас есть таблица с схемой T, содержащая все нежелательные строки, которые должны быть исключены из T на следующем шаге:
π{a1, a2, ..., an, v}(σ{v < v1}(T x ρ{a1, a2, ..., an, v1}T))
Наконец, исключите ненужные строки из T и мы получим строку с максимальным значением v:
T - π{a1, a2, ..., an, v}(σ{v < v1}(T x ρ{a1, a2, ..., an, v1}T))
(Я проработал это на основе ответа SaT и тестирования со Стэнфордом онлайн курс RA, так как я действительно не понял нотацию SaT, я поставьте решение в мои записи здесь, в котором условия оператора находятся в {}. Надеюсь, это может помочь кому-то в будущем)
Ответ 3
table1:= project field (table);
table2 (fieldrenamed):= project field (table);
Producted:=table1 mult table2;
minors:= select fild<fieldrenamed (producted);
result:=table1 difference (project field(minors));
Код соответствует winRDBI, поле - это атрибут, который вы хотите сравнить, чтобы получить максимальное значение. Таблица - это исходная таблица, в которой это поле.
Ответ 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
которое является максимальным значением
Привет, я знаю, что кто-то должен помочь в редактировании, чтобы лучше выглядеть
\project_{Att}Relation
\diff
\project_{A2}(\rename_{A2}(\project_{Att}Relation)
\join_{A2<A1}
\rename_{A1}(\project_{Att}Relation))
Ответ 5
max(columnname)
вернет максимальное значение в столбце columnname.