1. 聚合函数

在开发中,我们常常有类似的需求:统计某个字段的最大值、最小值、平均值等等。为此,MySQL 中提供了聚合函数来实现这些功能。所谓聚合,就是将多行汇总成一行;其实,所有的聚合函数均如此 —— 输入多行,输出一行。聚合函数具有自动滤空的功能,若某一个值为 NULL,那么会自动将其过滤使其不参与运算。

1.1 COUNT()

功能:统计表中数据的行数或者统计指定列其值不为 NULL 的数据个数

语法

SELECT COUNT(column_name) FROM table_name;
SELECT COUNT(*) FROM table_name;

示例:查询学生表中有多少人

SELECT COUNT(*) FROM student;

1.2 MAX()

功能:计算指定列的最大值,如果指定列是字符串类型则使用字符串排序运算

语法

SELECT MAX(column_name) FROM table_name;

示例:查询学生表中年纪最大的学生

SELECT MAX(age) FROM student;

1.3 MIN()

功能:计算指定列的最小值,如果指定列是字符串类型则使用字符串排序运算

语法

SELECT MIN(column_name) FROM table_name;

示例:查询学生表中年纪最小的学生

SELECT sname, MIN(age) FROM student;

1.4 SUM()

功能:计算指定列的数值和,如果指定列类型不是数值类型则计算结果为 0

语法

SELECT SUM(column_name) FROM table_name;

示例:查询学生表中年纪的总和

SELECT SUM(age) FROM student;

1.5 AVG()

功能:计算指定列的平均值,如果指定列类型不是数值类型则计算结果为 0

语法

SELECT AVG(column_name) FROM table_name;

示例:查询学生表中年纪的平均数

SELECT AVG(age) FROM student;

聚合函数使用规则

  • 只能在以下子句中使用聚合函数

    • SELECT 子句

    • HAVING 子句

    • ORDER BY 子句

  • 注意:在 WHERE 子句中使用聚合函数是错误的,这是常见的 SQL 语法错误。

2. 其他常用函数

2.1 时间函数

函数

功能

示例

结果说明

NOW()

获取当前日期和时间

SELECT NOW();

返回当前完整的日期时间,如:2023-10-25 15:30:45

DAY(NOW())

获取当前日期中的日

SELECT DAY(NOW());

返回当前日,如:25

DATE(NOW())

获取当前日期

SELECT DATE(NOW());

返回当前日期,如:2023-10-25

TIME(NOW())

获取当前时间

SELECT TIME(NOW());

返回当前时间,如:15:30:45

YEAR(NOW())

获取当前年份

SELECT YEAR(NOW());

返回当前年份,如:2023

MONTH(NOW())

获取当前月份

SELECT MONTH(NOW());

返回当前月份,如:10

CURRENT_DATE()

获取当前日期

SELECT CURRENT_DATE();

同 DATE (NOW ())

CURRENT_TIME()

获取当前时间

SELECT CURRENT_TIME();

同 TIME (NOW ())

CURRENT_TIMESTAMP()

获取当前时间戳

SELECT CURRENT_TIMESTAMP();

同 NOW ()

ADDTIME(time1, time2)

时间相加

SELECT ADDTIME('14:23:12','01:02:01');

返回 15:25:13

DATE_ADD(date, INTERVAL expr unit)

日期增加

SELECT DATE_ADD(NOW(), INTERVAL 1 DAY);

返回明天的日期时间

DATE_ADD(date, INTERVAL expr unit)

日期增加

SELECT DATE_ADD(NOW(), INTERVAL 1 MONTH);

返回下个月的日期时间

DATE_SUB(date, INTERVAL expr unit)

日期减少

SELECT DATE_SUB(NOW(), INTERVAL 1 DAY);

返回昨天的日期时间

DATE_SUB(date, INTERVAL expr unit)

日期减少

SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH);

返回上个月的日期时间

DATEDIFF(date1, date2)

计算日期差

SELECT DATEDIFF('2019-07-22','2019-05-05');

返回两个日期之间的天数差

2.2 字符串函数


函数

功能

示例

结果说明

CONCAT(str1, str2, ...)

连接多个字符串

SELECT CONCAT('Hello', ' ', 'World');

返回 "Hello World"

INSTR(str, substr)

返回子字符串在字符串中第一次出现的位置

SELECT INSTR('Hello World', 'World');

返回 7

LENGTH(str)

返回字符串的长度(字节数)

SELECT LENGTH('Hello');

返回 5

2.3 数学函数

函数

功能

示例

结果说明

ABS(number)

计算绝对值

SELECT ABS(-136);

返回 136

FLOOR(number)

向下取整

SELECT FLOOR(3.14);

返回 3

CEILING(number)

向上取整

SELECT CEILING(3.14);

返回 4