MIN (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse Analytics分析平台系统(PDW)Microsoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库Microsoft Fabric 中的 SQL 数据库

返回组中指定表达式的所有值的最小值。 可以后跟 OVER 子句。

注释

若要获取多个表达式内联的所有值的最小值,请参阅 逻辑函数 - LEAST

Transact-SQL 语法约定

语法

聚合函数语法:

MIN ( [ ALL | DISTINCT ] expression )

分析函数语法:

MIN ( [ ALL ] expression ) OVER ( [ <partition_by_clause> ] [ <order_by_clause> ] )

参数

全部

向所有值应用此聚合函数。 ALL 是默认值。

DISTINCT

指定考虑每一个唯一值。 DISTINCT 对 ISO 兼容性没有意义 MIN,并且仅适用于 ISO 兼容性。

expression

常量、列名或函数,以及算术、按位和字符串运算符的任意组合。 MIN 可以与 数字charncharvarcharnvarcharuniqueidentifierdatetime 列一起使用,但不能与 列一起使用。 不允许聚合函数和子查询。

有关详细信息,请参阅表达式

OVER ([ partition_by_clause ] [ order_by_clause ] )

partition_by_clause 将子句生成的 FROM 结果集划分为应用函数的分区。 如果未指定,则此函数将查询结果集的所有行视为单个组。

order_by_clause 确定执行操作的逻辑顺序。

有关详细信息,请参阅 SELECT - OVER 子句

返回类型

返回与 expression 相同的值

注解

MIN 忽略任何 null 值。

使用字符数据列时, MIN 查找排序序列中的最小值。

MIN 在不使用 and OVERORDER BY 子句的情况下使用时,是确定性函数。 使用 and OVER 子句指定ORDER BY时,这是不确定的。 有关详细信息,请参阅 “确定性”和“不确定”函数

MIN 对一组行进行作。 若要获取一组内联值的最小值,请参阅 逻辑函数 - LEAST

示例

本文中的代码示例使用 AdventureWorks2025AdventureWorksDW2025 示例数据库,可以从 Microsoft SQL Server 示例和社区项目 主页下载该数据库。

A. 基本示例

以下示例返回最低(最小)税率。

SELECT MIN(TaxRate)
FROM Sales.SalesTaxRate;
GO

结果集如下。

-------------------
5.00

B. 使用 OVER 子句

以下示例使用子句的MIN函数MAXAVGCOUNT为表中每个部门OVER提供聚合值。HumanResources.Department

SELECT DISTINCT Name,
                MIN(Rate) OVER (PARTITION BY edh.DepartmentID) AS MinSalary,
                MAX(Rate) OVER (PARTITION BY edh.DepartmentID) AS MaxSalary,
                AVG(Rate) OVER (PARTITION BY edh.DepartmentID) AS AvgSalary,
                COUNT(edh.BusinessEntityID) OVER (PARTITION BY edh.DepartmentID) AS EmployeesPerDept
FROM HumanResources.EmployeePayHistory AS eph
     INNER JOIN HumanResources.EmployeeDepartmentHistory AS edh
         ON eph.BusinessEntityID = edh.BusinessEntityID
     INNER JOIN HumanResources.Department AS d
         ON d.DepartmentID = edh.DepartmentID
WHERE edh.EndDate IS NULL
ORDER BY Name;

结果集如下。

Name                          MinSalary             MaxSalary             AvgSalary             EmployeesPerDept
----------------------------- --------------------- --------------------- --------------------- ----------------
Document Control              10.25                 17.7885               14.3884               5
Engineering                   32.6923               63.4615               40.1442               6
Executive                     39.06                 125.50                68.3034               4
Facilities and Maintenance    9.25                  24.0385               13.0316               7
Finance                       13.4615               43.2692               23.935                10
Human Resources               13.9423               27.1394               18.0248               6
Information Services          27.4038               50.4808               34.1586               10
Marketing                     13.4615               37.50                 18.4318               11
Production                    6.50                  84.1346               13.5537               195
Production Control            8.62                  24.5192               16.7746               8
Purchasing                    9.86                  30.00                 18.0202               14
Quality Assurance             10.5769               28.8462               15.4647               6
Research and Development      40.8654               50.4808               43.6731               4
Sales                         23.0769               72.1154               29.9719               18
Shipping and Receiving        9.00                  19.2308               10.8718               6
Tool Design                   8.62                  29.8462               23.5054               6

示例:Azure Synapse Analytics 和 Analytics Platform System (PDW)

C. 使用 MIN

以下示例使用 MIN 聚合函数返回指定销售订单集中成本最低的(最小)产品的价格。

-- Uses AdventureWorks
SELECT DISTINCT MIN(UnitPrice)
FROM dbo.FactResellerSales
WHERE SalesOrderNumber IN (N'SO43659', N'SO43660', N'SO43664');

结果集如下。

------
5.1865

D. 将 MIN 与 OVER 配合使用

以下示例使用 MIN OVER() 分析函数返回每个销售订单中成本最低的产品的价格。 结果集根据 SalesOrderID 列进行分区。

-- Uses AdventureWorks
SELECT DISTINCT MIN(UnitPrice) OVER (PARTITION BY SalesOrderNumber) AS LeastExpensiveProduct,
                SalesOrderNumber
FROM dbo.FactResellerSales
WHERE SalesOrderNumber IN (N'SO43659', N'SO43660', N'SO43664')
ORDER BY SalesOrderNumber;

结果集如下。

LeastExpensiveProduct SalesOrderID
--------------------- ----------
5.1865                SO43659
419.4589              SO43660
28.8404               SO43664