Логические функции — LEAST (Transact-SQL)
Эта функция возвращает минимальное значение из списка, содержащего одно или несколько выражений.
Синтаксис
LEAST ( expression1 [ , . expressionN ] )
Аргументы
expression1, expressionN
Список выражений любого сопоставимого типа данных, разделенный запятыми. Функция LEAST требует по меньшей мере один аргумент, но не более 254 аргументов.
Каждое выражение может быть константой, переменной, именем столбца или функцией, а также любым сочетанием арифметических, битовых и строковых операторов. Допускаются агрегатные функции и скалярные вложенные запросы.
Типы возвращаемых данных
Возвращает тип данных с наивысшим приоритетом из переданного функции набора типов. Дополнительные сведения см. в разделе Приоритет типов данных (Transact-SQL).
Если все аргументы имеют одинаковый тип данных и тип поддерживается для сравнения, LEAST возвращает этот тип.
В противном случае функция перед сравнением неявно приводит все аргументы к типу данных с наивысшим приоритетом и использует его как тип возвращаемого значения.
Для числовых типов масштаб типа возвращаемого значения будет соответствовать масштабу аргумента, имеющего тип данных с наивысшим приоритетом, либо наибольшему масштабу, если таких аргументов несколько.
Замечания
Все выражения в списке аргументов должны иметь сопоставимый тип данных, который может быть неявно преобразован в тип аргумента с наивысшим приоритетом.
Перед сравнением выполняется неявное приведение всех аргументов к типу данных с наивысшим приоритетом.
Если неявное преобразование типов между аргументами не поддерживается, функция завершится ошибкой и возвращает ошибку.
Дополнительные сведения о явном и неявном преобразовании см. в статье Преобразование типов данных (ядро СУБД).
Если один или несколько аргументов не NULL являются, NULL то аргументы игнорируются во время сравнения. Если все аргументы являются NULL , возвращается NULL LEAST .
Сравнение символьных аргументов осуществляется в соответствии с правилами, приведенными в статье Очередность параметров сортировки.
Для сравнения не поддерживаются следующие типы: varchar(max), varbinary(max) или nvarchar(max) превышающие 8000 байт, курсор, геометрия , география, география, изображение, неупорядоченные пользователем типы, ntext, table, text и xml. LEAST
Типы данных varchar(max), varbinary(max)и nvarchar(max) поддерживаются для аргументов, 8000 байт или меньше, и будут неявно преобразованы в varchar(n), varbinary(n)и nvarchar(n), соответственно, перед сравнением.
Например, varchar(max) может поддерживать до 8000 символов, если используется набор символов с одним байтом, а nvarchar(max) может поддерживать до 4000 байт-пар (при условии кодировки символов UTF-16).
Примеры
А. Возвращает максимальное значение из списка констант
В следующем примере возвращается минимальное значение из указанного списка констант.
Масштаб типа возвращаемого значения определяется масштабом аргумента с типом данных, имеющим наивысший приоритет.
SELECT LEAST('6.62', 3.1415, N'7') AS LeastVal; GO
LeastVal ------- 3.1415 (1 rows affected)
B. Возвращает минимальное значение из списка типов символов
В следующем примере возвращается минимальное значение из указанного списка символьных констант.
SELECT LEAST('Glacier', N'Joshua Tree', 'Mount Rainier') AS LeastString; GO
LeastString ------------- Glacier (1 rows affected)
C. Возвращает минимальное значение из списка аргументов столбцов
Этот пример возвращает минимальное значение из списка аргументов столбца и при сравнении игнорирует значения NULL . В этом примере используется база данных AdventureWorksLT , которую можно быстро установить в качестве образца базы данных для нового экземпляра Базы данных SQL Azure. Дополнительные сведения см. в разделе Образцы баз данных AdventureWorks.
SELECT P.Name, P.SellStartDate, P.DiscontinuedDate, PM.ModifiedDate AS ModelModifiedDate, LEAST(P.SellStartDate, P.DiscontinuedDate, PM.ModifiedDate) AS EarliestDate FROM SalesLT.Product AS P INNER JOIN SalesLT.ProductModel AS PM ON P.ProductModelID = PM.ProductModelID WHERE LEAST(P.SellStartDate, P.DiscontinuedDate, PM.ModifiedDate) >= '2007-01-01' AND P.SellStartDate >= '2007-01-01' AND P.Name LIKE 'Touring %' ORDER BY P.Name;
Результирующий набор: EarliestDate выбирает наименьшее значение даты трех значений, игнорируя NULL .
Name SellStartDate DiscontinuedDate ModelModifiedDate EarliestDate ---------------------- ----------------------- ------------------- ----------------------- ----------------------- Touring Pedal 2007-07-01 00:00:00.000 NULL 2009-05-16 16:34:29.027 2007-07-01 00:00:00.000 Touring Tire 2007-07-01 00:00:00.000 NULL 2007-06-01 00:00:00.000 2007-06-01 00:00:00.000 Touring Tire Tube 2007-07-01 00:00:00.000 NULL 2007-06-01 00:00:00.000 2007-06-01 00:00:00.000 (3 rows affected)
D. Использование LEAST с локальными переменными
В этом примере с помощью LEAST определяется минимальное значение из списка локальных переменных в предикате предложения WHERE .
CREATE TABLE dbo.Studies ( VarX VARCHAR(10) NOT NULL, Correlation DECIMAL(4, 3) NULL ); INSERT INTO dbo.Studies VALUES ('Var1', 0.2), ('Var2', 0.825), ('Var3', 0.61); GO DECLARE @PredictionA DECIMAL(2, 1) = 0.7; DECLARE @PredictionB DECIMAL(3, 1) = 0.65; SELECT VarX, Correlation FROM dbo.Studies WHERE Correlation < LEAST(@PredictionA, @PredictionB); GO
Результирующий набор: Отображаются только значения меньше 0,65.
VarX Correlation ---------- ----------- Var1 .200 Var3 .610 (2 rows affected)
Д. Использование LEAST с столбцами, константами и переменными
В этом примере с помощью LEAST определяется минимальное значение из списка, содержащего столбцы, константы и переменные.
CREATE TABLE dbo.Studies ( VarX VARCHAR(10) NOT NULL, Correlation DECIMAL(4, 3) NULL ); INSERT INTO dbo.Studies VALUES ('Var1', 0.2), ('Var2', 0.825), ('Var3', 0.61); GO DECLARE @VarX DECIMAL(4, 3) = 0.59; SELECT VarX, Correlation, LEAST(Correlation, 1.0, @VarX) AS LeastVar FROM dbo.Studies; GO
VarX Correlation LeastVar ---------- --------------------- --------------------- Var1 0.200 0.200 Var2 0.825 0.590 Var3 0.610 0.590 (3 rows affected)
Следующие шаги
- GREATEST (Transact-SQL)
- MAX (Transact-SQL)
- MIN (Transact-SQL)
- CASE (Transact-SQL)
- CHOOSE (Transact-SQL)
Как выбрать минимальное значение из базы SQL
Необходимо получить имя и продолжительность самой короткой песни, без вложенных запросов. Записываю так (MS SQL):
SELECT name, duration FROM songs GROUP BY name, duration HAVING duration=MIN(duration);
Почему-то выводит все песни, а не одну - с минимальной продолжительностью. Подскажите почему и что я неверное понимаю?
Отслеживать
Konstantin Shmelev
задан 14 авг 2015 в 16:51
Konstantin Shmelev Konstantin Shmelev
23 1 1 серебряный знак 5 5 бронзовых знаков
GROUP BY и HAVING нужны для агрегирования многих записей. А нужна, насколько я понял, всего одна.
14 авг 2015 в 17:03
В тексте вопроса хорошо бы писать о каком диалекте SQL идет речь. Или какой СУБД идет запрос? SQL Server, Oracle, MySQL?
SQL функция MIN
В этом учебном материале вы узнаете, как использовать SQL функцию MIN с синтаксисом и примерами.
Описание
SQL функция MIN используется для возврата минимального значения выражения в операторе SELECT.
Синтаксис
Синтаксис для функции MIN в SQL.
SELECT MIN(aggregate_expression)
FROM tables
[WHERE conditions];
Или синтаксис для функции MIN при группировке результатов по одному или нескольким столбцам.
SELECT expression1, expression2, . expression_n,
MIN(aggregate_expression)
FROM tables
[WHERE conditions]
GROUP BY expression1, expression2, . expression_n;
Параметры или аргумент
expression1 , expression2 , . expression_n Выражения, которые не инкапсулированы в функции MIN и должны быть включены в предложение GROUP BY в конце SQL запроса aggregate_expression Это столбец или выражение, из которого будет возвращено минимальное значение tables Таблицы, из которых вы хотите получить записи. В предложении FROM должна быть указана хотя бы одна таблица WHERE conditions Необязательный. Это условия, которые должны быть выполнены для выбора записей
Пример - с одним выражением
Простейшим способом использования SQL функции MIN было бы возвращение одного поля, которое вычисляет значение MIN.
Например, вы можете узнать минимальную зарплату всех сотрудников.
Функция MIN
Функция MIN возвращает минимальное значение поля среди найденных строк.
Синтаксис
SELECT MIN(поле) FROM имя_таблицы WHERE условие
Таблицы для примеров
| id айди |
name имя |
age возраст |
salary зарплата |
|---|---|---|---|
| 1 | user1 | 23 | 400 |
| 2 | user2 | 25 | 500 |
| 3 | user3 | 23 | 500 |
| 4 | user4 | 30 | 900 |
| 5 | user5 | 27 | 500 |
| 6 | user6 | 28 | 900 |
Пример
Давайте найдем минимальное значение зарплаты в таблице:
SELECT MIN(salary) as min FROM employees
Результат выполнения SQL запроса:
| min минимальная зарплата |
|---|
| 300 |
Пример
Давайте найдем минимальное значение зарплаты среди тех записей, у которых id больше или равен 2 -м:
SELECT MIN(salary) as min FROM employees WHERE id>=2
Результат выполнения SQL запроса:
| min минимальная зарплата |
|---|
| 400 |
Пример
Давайте найдем максимальное и минимальное значение зарплаты одновременно:
SELECT MIN(salary) as min, MAX(salary) as max FROM employees
Результат выполнения SQL запроса:
| min минимальная зарплата |
max максимальная зарплата |
|---|---|
| 300 | 700 |
Смотрите также
- функцию MAX ,
которая возвращает максимальное значение