SQL MIN() & MAX()函数
在SQL中,MIN()和MAX()是聚合函数。MIN()函数返回所选列的最小值,而MAX()函数返回所选列的最大值。
聚合函数通常在数据库、电子表格和现在常见的统计软件包中使用。
数学计算将一系列值作为输入,并产生一个表示给定数据的重要性的单个值表达式,称为聚合函数。
语法
以下是MIN()函数的语法
SELECT MIN(column_name) FROM table_name WHERE conditions;
以下是MAX()函数的语法
SELECT MAX(column_name) FROM table_name WHERE conditions;
正如我们在上面看到的,这些函数与WHERE子句一起用于从过滤后的记录中选择最大值。
示例
在以下示例中,我们使用Customers表运行MIN()和MAX()函数的查询。这些函数分别预计显示该表中的最低工资和最高工资。
假设我们使用以下查询创建了一个名为Customers的表,其中包含顾客的个人详细信息,包括姓名、年龄、地址和工资等。
CREATE TABLE CUSTOMERS (
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25),
SALARY DECIMAL (18, 2),
PRIMARY KEY (ID)
);
现在,使用INSERT语句将值插入到该表中,如下所示:
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'kaushik', 23, 'Kota', 2000.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Komal', 22, 'MP', 4500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (7, 'Muffy', 24, 'Indore', 10000.00 );
表将被创建为 −
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
以下是显示客户最低和最高工资的查询语句-
SELECT MIN(SALARY), MAX(SALARY) FROM customers;
输出
执行以上查询时,结果显示如下 –
+------------------+------------------+
| (No column name) | (No column name) |
+------------------+------------------+
| 1500.0000 | 10000.0000 |
+------------------+------------------+
MAX()和MIN()函数的别名
有时候,数据库表中的字段名很难阅读和理解。因此,需要使这些字段中的数据更易于理解。这就是为什么在SQL中引入了别名的概念。
别名用于使用 “AS” 关键字为表的列分配临时自定义名称。这些自定义名称旨在更容易阅读和在执行查询时更容易访问字段。
它们也可以与MIN()和MAX()函数一起使用。
语法
以下是带有“as”关键字的MIN()函数的语法。
SELECT MIN(column_name) as alias_name FROM table_name;
以下是带有”as”关键字的MAX()函数的语法。
SELECT MAX(column_name) as alias_name FROM table_name;
示例
以下是使用MIN()函数从Customers表中获取最小年龄的SQL查询语句:
SELECT MIN(age) AS 'min_age' FROM CUSTOMERS;
输出
当我们执行上面的查询时,”age”字段中的最小值如下所示显示。
+------------------+
| min_age |
+------------------+
| 23 |
+------------------+
示例
在下面的示例中,我们使用MAX()函数并编写一个查询,从CUSTOMERS表中检索具有最大年龄的数据,并显示别名“max_age”。
SELECT MAX(age) AS 'max_age' FROM CUSTOMERS;
输出
当我们执行上面的查询时,将显示“age”字段中的最大值,如下所示。
+------------------+
| max_age |
+------------------+
| 35 |
+------------------+
MAX()和MIN()与字符串
除了数值之外,我们还可以将MAX()和MIN()函数与字符串数据类型(如文本)一起使用。
示例
以下是使用MIN()函数从customer表中检索客户名称之间的最小值的查询 –
SELECT MIN(first_name) AS min_first_name FROM CUSTOMERS;
Following is the query to retrieve the maximum value among the names of customers in the customer table using the MAX() function −
SELECT MAX(first_name) AS max_first_name FROM CUSTOMERS;
选择带最小值或最大值的整行
如果我们想显示带有最大值或最小值的整行,可以使用嵌套的“select”语句。
语法
下面是选择包含最小年龄的整行的语法。
SELECT * FROM CUSTOMERS WHERE column_name = (SELECT MIN(column_name) FROM CUSTOMERS);
下面是选择包含最大age的整行的语法
SELECT * FROM CUSTOMERS WHERE column_name = (SELECT MAX(column_name) FROM CUSTOMERS);
示例
在下面的示例中,我们使用MAX()函数并编写一个查询,从CUSTOMERS表中检索具有最大名称的行。
SELECT * FROM CUSTOMERS WHERE NAME = (SELECT MAX(NAME) FROM CUSTOMERS);
输出
当我们执行上述查询时,我们将得到以下结果−
+----+--------+-----+-----------+-----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+--------+-----+-----------+-----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.0000 |
+----+--------+-----+-----------+-----------+
1 行结果 (0.05 秒)
在HAVING子句中使用MIN()和MAX()
使用min()和max()函数以及having子句可以根据列的最小和最大值来过滤数据。
语法
min和max与having子句的语法如下所示 −
SELECT column_name,
MAX(column_name)/MIN(column_name)
FROM table_name
GROUP BY column_name
HAVING MIN(column_name)/MAX(column_name) > value;
示例
在下面的示例中,我们尝试使用MIN()函数和having子句获取客户的ID、姓名和工资。
SELECT ID, NAME,
MAX(SALARY) AS MAX_Salary
FROM customers
GROUP BY NAME, ID
HAVING MIN(SALARY) > 5000;
输出
执行上述查询时,我们可以看到最小工资大于5000的员工的最高工资的详细信息,如下表所示 −
+----+----------+------------+
| ID | NAME | MAX_Salary |
+----+----------+------------+
| 4 | Chaitali | 6500.0000 |
| 5 | Hardik | 8500.0000 |
| 7 | Muffy | 10000.0000 |
+----+----------+------------+