
🌈 个人主页:danci_
🔥 系列专栏:《设计模式》《MYSQL》
💪🏻 制定明确可量化的目标,坚持默默的做事。
✨欢迎加入探索MYSQL聚合函数之旅✨
👋 大家好!文本学习和探索MYSQL聚合函数。👋 效率与精准是制胜的关键。MySQL聚合函数,作为数据库操作中的强大工具,能帮你快速进行数据统计、分析和汇总。本篇文章将带你轻松上手MySQL聚合函数,让复杂的数据处理变得简单高效。准备好提升你的数据库技能了吗?让我们一同揭开MySQL聚合函数的神秘面纱,让你的数据飞起来!
一、
AVG 求平均值
MySQL
AVG()
函数计算并返回表达式的平均值。
忽略
NULL
值。
语法:
AVG(expr)
AVG(DISTINCT expr)
SELECTAVG(expr), ...
FROM table_name
[WHERE ...];
SELECTAVG(expr), group_expr1, group_expr2, ...
FROM table_name
[WHERE ...]
GROUPBY group_expr1, group_expr2, ...;
参数说明
expr:expr一个用于聚合运算的表达式。它可以是一个列名,也可以是一个表达式- *
group_expr1, group_expr2, ...*:用于分组的表达式或者列名。
返回值
- 表达式的平均值。
- 返回
NULL情况:没有匹配的行。
示例:
CREATETABLE `student_score` (
`score` INTNOTNULL
);
INSERTINTO `student_score` (`score`)
VALUES (80),
(90),
(84),
(96),
(80),
( 98),
( 75);
SELECTAVG(score) from student_score; //86.1429
二、
COUNT 统计数量(非null值)
MySQL
COUNT()
函数用于统计表达式代表的所有值的中的非 NULL 值的数量。
语法:
COUNT(expr)
SELECTCOUNT(expr), ...
FROM table_name
[WHERE ...];
SELECTCOUNT(expr), group_expr1, group_expr2, ...
FROM table_name
[WHERE ...]
GROUPBY group_expr1, group_expr2, ...;
参数说明
expr:expr一个需要统计数量的表达式。它可以是一个列名,也可以是一个表达式。- *
group_expr1, group_expr2, ...*:用于分组的表达式或者列名。
返回值
- 所有行中的表达式代表的所有值的中的非
NULL值的数量。 - 注意: 如果使用
COUNT(*)或者类似于COUNT(1)之类的语句,则会统计NULL值。
示例:
CREATETABLE `student_score` (
`score` INT
);
INSERTINTO `student_score` (`score`)
VALUES (80),
(90),
(84),
(96),
(80),
( 98),
( 75),
( NULL);
SELECTCOUNT(score), //7COUNT(*), //8COUNT(1) //8from student_score;
三、GROUP_CONCAT 分组列连接成字符串
MySQL
GROUP_CONCAT()
函数将一个分组中指定的列或表达式的值连接成一个字符串并返回。
语法:
GROUP_CONCAT(
[DISTINCT] expr [, expr2 ...]
[ORDERBY ...]
[SEPARATOR separator]
)
SELECT GROUP_CONCAT(expr), ...
FROM table_name
[WHERE ...]
[GROUPBY group_expr1, group_expr2, ...];
参数说明
- *
expr [, expr2 ...]*:必须的。它指定了要连接的一个或者多个列或表达式。 - *
ORDER BY*:可选的。它用于对要连接的内容排序。 - *
SEPARATOR separator*:可选的。separator连接符。默认是,。
返回值
- 将通过列或者表达式指定的内容连接起来。
- 返回
NULL情况:结果集没有任何行。
示例:
DROPTABLE IF EXISTS `student_score`;
CREATETABLE `student_score` (
`id` INTPRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(255) NOTNULL,
`score` INTNOTNULL
);
SELECT
name AS `Name`,
GROUP_CONCAT(subject) AS `Subjects`
FROM student_score
GROUPBY name;
+------+--------------+| Name | Subjects |+------+--------------+| Tim | English || Tom | Math,English |+------+--------------+----------------------------------------------------------SELECT
name AS `Name`,
GROUP_CONCAT(subject SEPARATOR '/') AS `Subjects`
FROM student_score
GROUPBY name;
+------+--------------+| Name | Subjects |+------+--------------+| Tim | English || Tom | Math/English |+------+--------------+----------------------------------------------------------SELECT
name AS `Name`,
GROUP_CONCAT(
CONCAT(subject, '-'), score
ORDERBY subject
SEPARATOR '/'
) AS `Scores`
FROM student_score
GROUPBY name;
或
SELECT
name AS `Name`,
GROUP_CONCAT(
CONCAT_WS('-', subject, score)
ORDERBY subject
SEPARATOR '/'
) AS `Scores`
FROM student_score
GROUPBY name;
+------+--------------------+| Name | Scores |+------+--------------------+| Tim | English-98|| Tom | English-90/Math-80|+------+--------------------+
四、MAX 取最大值
MySQL MAX() 函数返回表达式代表的所有值中的最大值。如果您需要获取一个表达式中的最小值,请使用 MIN() 函数。
语法:
MAX(expr)
SELECTMAX(expr), ...
FROM table_name
[WHERE ...];
SELECTMAX(expr), group_expr1, group_expr2, ...
FROM table_name
[WHERE ...]
GROUPBY group_expr1, group_expr2, ...;
参数说明
expr:expr一个用于聚合运算的表达式。它可以是一个列名,也可以是一个表达式- *
group_expr1, group_expr2, ...*:用于分组的表达式或者列名。
返回值
- 表达式代表的所有值中的最大值。
- 返回
NULL情况:没有匹配的行。
示例:
SELECTMAX(score) from student_score; //98SELECT name, MAX(score) FROM student_score GROUPBY name;
+------+------------+| name |MAX(score) |+------+------------+| Tom |90|| Tim |98|+------+------------+
五、MIN 取最小值
MySQL MIN() 函数返回表达式代表的所有值中的最小值。如果您需要获取一个表达式中的最大值,请使用 MAX() 函数。
语法:
MIN(expr)
SELECTMIN(expr), ...
FROM table_name
[WHERE ...];
SELECTMIN(expr), group_expr1, group_expr2, ...
FROM table_name
[WHERE ...]
GROUPBY group_expr1, group_expr2, ...;
参数说明
expr:expr一个用于聚合运算的表达式。它可以是一个列名,也可以是一个表达式。- *
group_expr1, group_expr2, ...*:用于分组的表达式或者列名。
返回值
- 表达式代表的所有值中的最小值。
- 返回
NULL情况:没有匹配的行。
示例:
mysql>SELECTMIN(score) from student_score;
+------------+|MIN(score) |+------------+|80|+------------+
mysql>SELECT subject, MIN(score) FROM student_score GROUPBY subject;
+---------+------------+| subject |MIN(score) |+---------+------------+| Math |80|| English |90|+---------+------------+
六、SUM 求和(非null值)
MySQL
SUM()
函数计算所有指定的非 NULL 值的总和并返回。
语法:
SUM(expr)
SELECTSUM(expr), ...
FROM table_name
[WHERE ...];
SELECTSUM(expr), group_expr1, group_expr2, ...
FROM table_name
[WHERE ...]
GROUPBY group_expr1, group_expr2, ...;
参数说明
expr:expr一个需要统计数量的表达式。它可以是一个列名,也可以是一个表达式。- *
group_expr1, group_expr2, ...*:用于分组的表达式或者列名。
返回值
- 所有指定的非 NULL 值的总和。
- 返回
NULL情况:没有匹配的行。
示例:
mysql>SELECTSUM(score) from student_score;
+------------+|SUM(score) |+------------+|268|+------------+
mysql>SELECT name, SUM(score)FROM student_score GROUPBY name;
+------+------------+| name |SUM(score) |+------+------------+| Tom |170|| Tim |98|+------+------------+
七、BIT_AND 按位与运算(非null值)
MySQL BIT_AND() 函数是一个聚合函数,它对所有的非 null 输入值执行"按位与"运算。(只处理那些非 null 的值)
按位与处理两个长度相同的二进制数,两个相应的二进位都为 1,该位的结果值才为 1,否则为 0。
语法:
BIT_AND(expr)
SELECT BIT_AND(expr), ...
FROM table_name
[WHERE ...];
SELECT BIT_AND(expr), group_expr1, group_expr2, ...
FROM table_name
[WHERE ...]
GROUPBY group_expr1, group_expr2, ...;
参数说明
- *
expr*:必需的。一个列名或者表达式。它接受一个数值或者二进制值。
返回值
- 返回值的类型与输入参数的类型相同,它返回 对所有的非 null 输入值执行"按位与"运算的结果。
- 返回
NULL情况:所有的输入的值为 null。
示例:
mysql>SELECT BIT_AND(x) FROM (SELECT4 x UNIONSELECT5 x UNIONSELECT6 x ) t;
+------------+| BIT_AND(x) |+------------+|4|+------------+
“按位与” 运算,运算步骤如下:
4->1005->1016->110
BIT_AND() =100=4
八、BIT_OR 按位或运算(非null值)
MySQL BIT_OR() 函数是一个聚合函数,它对所有的非 null 输入值执行"按位或"运算。(只处理那些非 null 的值)
按位或处理两个长度相同的二进制数,两个相应的二进位都为 0,该位的结果值为 0,否则为 1。
语法:
BIT_OR(expr)
SELECT BIT_OR(expr), ...
FROM table_name
[WHERE ...];
SELECT BIT_OR(expr), group_expr1, group_expr2, ...
FROM table_name
[WHERE ...]
GROUPBY group_expr1, group_expr2, ...;
参数说明
- *
expr*:必需的。一个列名或者表达式。它接受一个整数或者 bit 类型的值。
返回值
- 返回值的类型与输入参数的类型相同,它返回 对所有的非 null 输入值执行"按位或"运算的结果。
- 返回
NULL情况:所有的输入的值为 null。
示例:
mysql>SELECT BIT_OR(x) FROM (SELECT4 x UNIONSELECT5 x UNIONSELECT6 x ) t;
+-----------+| BIT_OR(x) |+-----------+|7|+-----------+
“按位与” 运算,运算步骤如下:
4->1005->1016->110
BIT_OR() =111=7
九、BIT_XOR 按位异或运算(非null值)
MySQL BIT_XOR() 函数是一个聚合函数,它对所有的非 null 输入值执行"按位异或"运算。(只处理那些非 null 的值)
按位异或处理两个长度相同的二进制数,两个相应的二进位只要不同,该位的结果值为 1,否则为 0。
语法:
BIT_XOR(expr)
SELECT BIT_XOR(expr), ...
FROM table_name
[WHERE ...];
SELECT BIT_XOR(expr), group_expr1, group_expr2, ...
FROM table_name
[WHERE ...]
GROUPBY group_expr1, group_expr2, ...;
参数说明
- *
expr*:必需的。一个列名或者表达式。它接受一个整数或者 bit 类型的值。
返回值
- 返回值的类型与输入参数的类型相同,它返回 对所有的非 null 输入值执行"按位异或"运算的结果。
- 返回
NULL情况:所有的输入的值为 null。
示例:
mysql>SELECT BIT_XOR(x) FROM ( SELECT4 x UNIONSELECT5 x UNIONSELECT6 x ) t;
+------------+| BIT_XOR(x) |+------------+|7|+------------+
“按位异或” 运算,运算步骤如下:
4->1005->1016->110
BIT_XOR() =111=7
十、JSON_ARRAYAGG 聚合为一个 JSON 数组
MySQL
JSON_ARRAYAGG()
函数将指定的列或者表达式的值聚合为一个 JSON 数组。
语法:
JSON_ARRAYAGG(expr)
SELECTJSON_ARRAYAGG(expr), ...
FROM table_name
[WHERE ...]
[GROUPBY group_expr1, group_expr2, ...];
参数说明
- *
expr*:必须的。它可以是一个列名,也可以是一个表达式。
返回值
- 聚合了所有符合条件的值。
- 返回
NULL情况:结果集没有任何行。
示例:
mysql>select*from student_score;
+----+------+---------+-------+| id | name | subject | score |+----+------+---------+-------+|1| Tom | Math |80||2| Tom | English |90||3| Tim | English |98|+----+------+---------+-------+3rowsinset (0.00 sec)
mysql>SELECT name AS `Name`, JSON_ARRAYAGG(subject) AS `Subjects` FROM student_score GROUPBY name;
+------+---------------------+| Name | Subjects |+------+---------------------+| Tim | ["English"] || Tom | ["Math", "English"] |+------+---------------------+
十一、JSON_OBJECTAGG 聚合为一个 JSON 对象
MySQL
JSON_OBJECTAGG()
函数将由第一个参数作为键和第二个参数作为值的键值对聚合为一个 JSON 对象。
语法:
JSON_OBJECTAGG(key_expr, value_expr)
SELECTJSON_OBJECTAGG(key_expr, value_expr), ...
FROM table_name
[WHERE ...]
[GROUPBY group_expr1, group_expr2, ...];
参数说明
- *
key_expr*:必须的。它的值作为结果对象中的键值对中的键。它可以是一个列名,也可以是一个表达式。 - *
value_expr*:可选的。它的值作为结果对象中的键值对中的值。它可以是一个列名,也可以是一个表达式。
返回值
- 一个 JSON 对象,其中的键值对中的键是
key_expr的值,值是value_expr的值。 - 返回
NULL情况:结果集没有任何行。 - 注意:如果存在重复的键,则只保留最后一个键作为键值对,其他重复的键值对都被丢弃。
示例:
mysql>select*from student_score;
+----+------+---------+-------+| id | name | subject | score |+----+------+---------+-------+|1| Tom | Math |80||2| Tom | English |90||3| Tim | English |98|+----+------+---------+-------+3rowsinset (0.00 sec)
mysql>SELECT name AS `Name`, JSON_OBJECTAGG(subject, score) AS `Scores`FROM student_score GROUPBY name;
+------+-----------------------------+| Name | Scores |+------+-----------------------------+| Tim | {"English": 98} || Tom | {"Math": 80, "English": 90} |+------+-----------------------------+
十二、STD 求总体标准差(非null)
MySQL
STD()
函数计算所有非 null 输入值的总体标准差并返回结果。 它是 STDDEV_POP() 的别名。
只处理那些非 null 的值,忽略null值。
语法:
STD(expr)
参数说明
- *
expr:*必需的。一个列名或者表达式。它接受一个数值或者二进制值。
返回值
- 总体标准差。
- 返回
NULL情况:所有的输入的值为 null。
示例:
mysql>SELECT STD(x) FROM ( SELECT4 x UNIONSELECT5 x UNIONSELECT6 x) t;
+-------------------+| STD(x) |+-------------------+|0.816496580927726|+-------------------+
十三、STDDEV 求总体标准差(非null)
MySQL STDDEV() 函数计算所有非 null 输入值的总体标准差并返回结果。 它是 STDDEV_POP() 的别名。
只处理那些非 null 的值,null 值会被忽略。
语法:
STDDEV(expr)
SELECTAVG(expr), ...
FROM table_name
[WHERE ...];
SELECTAVG(expr), group_expr1, group_expr2, ...
FROM table_name
[WHERE ...]
GROUPBY group_expr1, group_expr2, ...;
参数说明
- *
expr*:必需的。一个列名或者表达式。它接受一个数值或者二进制值。
返回值
- 所有非 null 输入值的总体标准差。
- 返回
NULL情况:所有的输入的值为 null。
示例:
mysql>SELECT STDDEV(x) FROM ( SELECT4 x UNIONSELECT5 x UNIONSELECT6 x) t;
+-------------------+| STDDEV(x) |+-------------------+|0.816496580927726|+-------------------+
十四、STDDEV_POP 求总体标准差(非null)
MySQL
STDDEV_POP()
函数计算所有非 null 输入值的总体标准差并返回结果。
只处理那些非 null 的值,null 值会被函数忽略。
语法:
STDDEV_POP(expr)
SELECTSTDDEV_POP(expr), ...
FROM table_name
[WHERE ...];
SELECTSTDDEV_POP(expr), group_expr1, group_expr2, ...
FROM table_name
[WHERE ...]
GROUPBY group_expr1, group_expr2, ...;
参数说明
- *
expr*:必需的。一个列名或者表达式。它接受一个数值或者二进制值。
返回值
- 所有非 null 输入值的总体标准差。
- 返回
NULL情况:所有的输入的值为 null。
示例:
mysql>SELECTSTDDEV_POP(x) FROM ( SELECT4 x UNIONSELECT5 x UNIONSELECT6 x) t;
+-------------------+|STDDEV_POP(x) |+-------------------+|0.816496580927726|+-------------------+
十五、STDDEV_SAMP 计算样本标准差(非null)
MySQL
STDDEV_SAMP()
函数计算所有非 null 输入值的样本标准差并返回结果。
只处理那些非 null 的值,null 值会被函数忽略。
语法:
STDDEV_SAMP(expr)
SELECTSTDDEV_SAMP(expr), ...
FROM table_name
[WHERE ...];
SELECTSTDDEV_SAMP(expr), group_expr1, group_expr2, ...
FROM table_name
[WHERE ...]
GROUPBY group_expr1, group_expr2, ...;
参数说明
- *
expr*:必需的。一个列名或者表达式。它接受一个数值或者二进制值。
返回值
- 所有非 null 输入值的样本标准差。
- 返回
NULL情况:所有的输入的值为 null。
示例:
mysql>SELECTSTDDEV_SAMP(x) FROM ( SELECT4 x UNIONSELECT5 x UNIONSELECT6 x) t;
+----------------+|STDDEV_SAMP(x) |+----------------+|1|+----------------+
十六、VAR_POP 计算总体方差(非null)
MySQL
VAR_POP()
函数计算所有非 null 输入值的总体方差(总体标准差的平方)并返回结果。
只处理那些非 null 的值,null 值会被函数忽略。
语法:
VAR_POP(expr)
SELECTVAR_POP(expr), ...
FROM table_name
[WHERE ...];
SELECTVAR_POP(expr), group_expr1, group_expr2, ...
FROM table_name
[WHERE ...]
GROUPBY group_expr1, group_expr2, ...;
参数说明
- *
expr*:必需的。一个列名或者表达式。它接受一个数值或者二进制值。
返回值
- 所有非 null 输入值的总体方差(总体标准差的平方)。
- 返回
NULL情况:所有的输入的值为 null。
示例:
SELECT VAR_POP(x)
FROM (
SELECT 11 x
UNION
SELECT 12 x
UNION
SELECT 13 x
) t;
-- 输出
+--------------------+
| VAR_POP(x) |
+--------------------+
| 0.6666666666666666 |
+--------------------+
十七、VARIANCE 计算总体方差(非null)
MySQL
VAR_SAMP()
函数计算所有非 null 输入值的样本方差(样本标准差的平方)并返回结果。
只处理那些非 null 的值,null 值会被函数忽略。
语法:
VAR_SAMP(expr)
SELECTVAR_SAMP(expr), ...
FROM table_name
[WHERE ...];
SELECTVAR_SAMP(expr), group_expr1, group_expr2, ...
FROM table_name
[WHERE ...]
GROUPBY group_expr1, group_expr2, ...;
参数说明
- *
expr*:必需的。一个列名或者表达式。它接受一个数值或者二进制值。
返回值
- 所有非 null 输入值的样本方差(样本标准差的平方)。
- 返回
NULL情况:所有的输入的值为 null。
示例:
mysql>SELECTVAR_SAMP(x) FROM ( SELECT4 x UNIONSELECT5 x UNIONSELECT6 x) t;
+-------------+|VAR_SAMP(x) |+-------------+|1|+-------------+
十八、VAR_SAMP 计算样本方差(非null)
MySQL VARIANCE() 函数计算所有非 null 输入值的总体方差(总体标准差的平方)并返回结果。 它是 VAR_POP() 的别名。
只处理那些非 null 的值,null 值会被函数忽略。
语法:
VARIANCE(expr)
SELECT VARIANCE(expr), ...
FROM table_name
[WHERE ...];
SELECT VARIANCE(expr), group_expr1, group_expr2, ...
FROM table_name
[WHERE ...]
GROUPBY group_expr1, group_expr2, ...;
参数说明
- *
expr*:必需的。一个列名或者表达式。它接受一个数值或者二进制值。
返回值
- 返回所有非 null 输入值的总体方差(总体标准差的平方)。
- 返回
NULL情况:所有的输入的值为 null。
示例:
mysql>SELECT VARIANCE(x) FROM ( SELECT4 x UNIONSELECT5 x UNIONSELECT6 x) t;
+--------------------+| VARIANCE(x) |+--------------------+|0.6666666666666666|+--------------------+
好了,今天分享到这里。希望你喜欢这次的探索之旅!不要忘记 "点赞" 和 "关注" 哦,我们下次见!🎈
版权归原作者 danci_btq 所有, 如有侵权,请联系我们删除。