Опубликован стандарт SQL:2023
Добавлены новые функции GREATEST и LEAST, выбирающие наибольшее и наименьшее значение из переданного списка. Например:
SELECT greatest(1, 2, 3); --> 3
SELECT least(1, 2, 3); --> 1
SELECT least(standard, discount) FROM data ...
Собственно вопрос: в чем смысл функций GREATEST и LEAST. Они же практически дублируют MAX() и MIN()?
Здравствуйте, BlackEric, Вы писали:
BE>Добавлены новые функции GREATEST и LEAST, выбирающие наибольшее и наименьшее значение из переданного списка. Например:
BE>BE>SELECT greatest(1, 2, 3); --> 3
BE> SELECT least(1, 2, 3); --> 1
BE> SELECT least(standard, discount) FROM data ...
BE>
BE>Собственно вопрос: в чем смысл функций GREATEST и LEAST. Они же практически дублируют MAX() и MIN()?
MAX и MIN работают по строкам, а GREATEST и LEAST — по столбцам.
Понятно, что можно перевести одно в другое, но это зачастую сильно усложнеяет и замедляет запрос.
Заменой GREATEST и LEAST мог бы служить CASE, но при большом количестве аргументов он будет ну очень громоздким.
Здравствуйте, vmpire, Вы писали:
V>MAX и MIN работают по строкам, а GREATEST и LEAST — по столбцам.
V>Понятно, что можно перевести одно в другое, но это зачастую сильно усложнеяет и замедляет запрос.
V>Заменой GREATEST и LEAST мог бы служить CASE, но при большом количестве аргументов он будет ну очень громоздким.
Logical functions — GREATEST (Transact-SQL)
Logical functions — LEAST (Transact-SQL)
Их уже даже в 2022 sql server добавили.
Спасибо!
Здравствуйте, BlackEric, Вы писали:
BE>Добавлены новые функции GREATEST и LEAST, выбирающие наибольшее и наименьшее значение из переданного списка. Например:
BE>Собственно вопрос: в чем смысл функций GREATEST и LEAST. Они же практически дублируют MAX() и MIN()?
MAX() и MIN() — агрегирующие функции, работают по группам, не поддерживают список параметров. GREATEST и LEAST — обычные линейные функции, работают на уровне строки.
Удобство в том, что иногда нужно вернуть из таблицы значение с каким-то минимальным/максималыным порогом. Не фильтровать, а именно выбрать, типа:
если значение выше порога — вернуть значение, иначе — вернуть пороговое значение. Как-то так. Это, конечно, можно как-то расшить через CASE (как уже было замечено),
но именно что — "как-то".