第九章 SQL聚合函数 MIN
返回指定列中的最小数据值的聚合函数。
大纲
MIN([ALL | DISTINCT [BY(col-list)]] expression [%FOREACH(col-list)] [%AFTERHAVING])
参数
-
ALL
- 可选-将聚合函数应用于所有值。ALL
对MIN
返回的值没有影响。提供它是为了与SQL-92
兼容。 -
DISTINCT
- 可选-指定考虑每个唯一值。DISTINCT
对MIN
返回的值没有影响。它是为SQL-92
兼容性提供的。 -
expression
- 任何有效的表达式。通常是包含要从中返回最小值的值的列的名称。 -
%FOREACH(col-list)
- 可选-列名或逗号分隔的列名列表。 -
%AFTERHAVING
- 可选-应用HAVING
子句中的条件。
MIN
返回与表达式相同的数据类型。
描述
MIN
聚合函数返回表达式的最小值(最小值)。通常,表达式是查询返回的多行中的字段名称(或包含一个或多个字段名称的表达式)。
MIN
可以在引用表或视图的SELECT
查询或子查询中使用。MIN
可以出现在选择列表或HAVING
子句中,与普通字段值一起出现。
MIN
不能在WHERE
子句中使用。除非SELECT
是子查询,否则不能在联接的ON
子句中使用MIN
。
与大多数其他聚合函数一样,min
不能应用于流字段。尝试这样做会生成SQLCODE-37
错误。
与大多数其他聚合函数不同,ALL
和DISTINCT
关键字(包括MIN(DISTINCT BY(Col2)col1))
在MIN中不执行任何操作。它们是为了与SQL-92兼容而提供的。
数据值
MIN
使用的指定字段可以是数字或非数字。对于数字数据类型字段,最小值定义为数值中的最低值;因此-7
低于-3
。对于非数字数据类型字段,最小值定义为字符串整理顺序中的最低值;因此'-3'
低于'-7'
。
空字符串(‘’
)值被视为CHAR(0)
。
谓词使用为字段定义的排序规则类型。默认情况下,字符串数据类型字段使用SQLUPPER
排序规则定义,该排序规则不区分大小写。
当字段定义的排序规则类型为SQLUPPER
时,MIN
将返回全部大写字母的字符串。因此,不管数据的原始字母是什么,SELECT MIN(Name)
都会返回‘Aaron’
。但是,因为比较是使用大写排序执行的,所以name=min(Name)
子句选择名称值为'Aaron', 'AARON', and 'aaron'
的行。
对于数值,返回的小数位数与表达式小数位数相同。
在派生最小聚合函数值时,数据字段中的空值将被忽略。如果查询没有返回任何行,或者返回的所有行的数据字段值为NULL
,则MIN
返回NULL
。
在当前事务期间所做的更改
与所有聚合函数一样,MIN始终返回数据的当前状态,包括未提交的更改,而不考虑当前事务的隔离级别。
示例
在下面的示例中,美元符号($
)连接到工资金额。
以下查询返回Sample.Employee
数据库中的最低(最低)工资:
SELECT '$' || MIN(Salary) AS LowSalary
FROM Sample.Employee
下面的查询为每个州返回一行,每个州至少包含一名薪资大于75,000
美元的员工。使用%AFTERHAVING
关键字,每行返回大于75,000
美元的最低员工工资。每行还返回该状态下所有员工的最低工资和最高工资:
SELECT Home_State,
'$' || MIN(Salary %AFTERHAVING) AS MinSalaryAbove75K,
'$' || MIN(Salary) AS MinSalary,
'$' || MAX(Salary) AS MaxSalary
FROM Sample.Employee
GROUP BY Home_State
HAVING Salary > 75000
ORDER BY MinSalaryAbove75K
以下查询返回在Sample.Employee
数据库中找到的排序规则序列中最小(最小)和最高(最大)的名称:
SELECT Name,MIN(Name),MAX(Name)
FROM Sample.Employee
请注意,在比较之前,MIN
和MAX
会将NAME
值转换为大写。
以下查询返回Sample.Employee
数据库中Home_State
为‘VT’
的员工的最低(最低)工资:
SELECT MIN(Salary)
FROM Sample.Employee
WHERE Home_State = 'VT'
以下查询返回Sample.Employee
数据库中每个Home_State
的员工数量和最低(最低)员工工资:
SELECT Home_State,
COUNT(Home_State) As NumEmployees,
MIN(Salary) As LowSalary
FROM Sample.Employee
GROUP BY Home_State
ORDER BY LowSalary