轻松上手MYSQL:掌握MYSQL聚合函数,数据分析不再难
🌈 个人主页:danci_
🔥 系列专栏:《设计模式》《MYSQL》
💪🏻 制定明确可量化的目标,坚持默默的做事。
✨欢迎加入探索MYSQL聚合函数之旅✨
👋 大家好!文本学习和探索MYSQL聚合函数。👋 效率与精准是制胜的关键。MySQL聚合函数,作为数据库操作中的强大工具,能帮你快速进行数据统计、分析和汇总。本篇文章将带你轻松上手MySQL聚合函数,让复杂的数据处理变得简单高效。准备好提升你的数据库技能了吗?让我们一同揭开MySQL聚合函数的神秘面纱,让你的数据飞起来!
目录
一、AVG 求平均值
二、COUNT 统计数量(非null值)
三、GROUP_CONCAT 分组列连接成字符串
四、MAX 取最大值
五、MIN 取最小值
六、SUM 求和(非null值)
七、BIT_AND 按位与运算(非null值)
八、BIT_OR 按位或运算(非null值)
九、BIT_XOR 按位异或运算(非null值)
十、JSON_ARRAYAGG 聚合为一个 JSON 数组
十一、JSON_OBJECTAGG 聚合为一个 JSON 对象
十二、STD 求总体标准差(非null)
十三、STDDEV 求总体标准差(非null)
十四、STDDEV_POP 求总体标准差(非null)
十五、STDDEV_SAMP 计算样本标准差(非null)
十六、VAR_POP 计算总体方差(非null)
十七、VARIANCE 计算总体方差(非null)
十八、VAR_SAMP 计算样本方差(非null)
一、AVG 求平均值
MySQL AVG() 函数计算并返回表达式的平均值。
忽略 NULL 值。
语法:
AVG(expr) AVG(DISTINCT expr) SELECT AVG(expr), ... FROM table_name [WHERE ...]; SELECT AVG(expr), group_expr1, group_expr2, ... FROM table_name [WHERE ...] GROUP BY group_expr1, group_expr2, ...;
参数说明
-
expr:expr 一个用于聚合运算的表达式。它可以是一个列名,也可以是一个表达式
-
group_expr1, group_expr2, ...:用于分组的表达式或者列名。
返回值
- 表达式的平均值。
- 返回 NULL情况:没有匹配的行。
示例:
CREATE TABLE `student_score` ( `score` INT NOT NULL ); INSERT INTO `student_score` (`score`) VALUES (80), (90), (84), (96), (80), ( 98), ( 75); SELECT AVG(score) from student_score; // 86.1429
二、COUNT 统计数量(非null值)
MySQL COUNT() 函数用于统计表达式代表的所有值的中的非 NULL 值的数量。
语法:
COUNT(expr) SELECT COUNT(expr), ... FROM table_name [WHERE ...]; SELECT COUNT(expr), group_expr1, group_expr2, ... FROM table_name [WHERE ...] GROUP BY group_expr1, group_expr2, ...;
参数说明
-
expr:expr 一个需要统计数量的表达式。它可以是一个列名,也可以是一个表达式。
-
group_expr1, group_expr2, ...:用于分组的表达式或者列名。
返回值
- 所有行中的表达式代表的所有值的中的非 NULL 值的数量。
- 注意: 如果使用 COUNT(*) 或者类似于 COUNT(1) 之类的语句,则会统计 NULL 值。
示例:
CREATE TABLE `student_score` ( `score` INT ); INSERT INTO `student_score` (`score`) VALUES (80), (90), (84), (96), (80), ( 98), ( 75), ( NULL); SELECT COUNT(score), // 7 COUNT(*), // 8 COUNT(1) // 8 from student_score;
三、GROUP_CONCAT 分组列连接成字符串
MySQL GROUP_CONCAT() 函数将一个分组中指定的列或表达式的值连接成一个字符串并返回。
语法:
GROUP_CONCAT( [DISTINCT] expr [, expr2 ...] [ORDER BY ...] [SEPARATOR separator] ) SELECT GROUP_CONCAT(expr), ... FROM table_name [WHERE ...] [GROUP BY group_expr1, group_expr2, ...];
参数说明
-
expr [, expr2 ...]:必须的。它指定了要连接的一个或者多个列或表达式。
-
ORDER BY:可选的。它用于对要连接的内容排序。
-
SEPARATOR separator:可选的。separator 连接符。默认是 ,。
返回值
- 将通过列或者表达式指定的内容连接起来。
- 返回 NULL情况:结果集没有任何行。
示例:
DROP TABLE IF EXISTS `student_score`; CREATE TABLE `student_score` ( `id` INT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL, `score` INT NOT NULL ); SELECT name AS `Name`, GROUP_CONCAT(subject) AS `Subjects` FROM student_score GROUP BY name; +------+--------------+ | Name | Subjects | +------+--------------+ | Tim | English | | Tom | Math,English | +------+--------------+ ---------------------------------------------------------- SELECT name AS `Name`, GROUP_CONCAT(subject SEPARATOR '/') AS `Subjects` FROM student_score GROUP BY name; +------+--------------+ | Name | Subjects | +------+--------------+ | Tim | English | | Tom | Math/English | +------+--------------+ ---------------------------------------------------------- SELECT name AS `Name`, GROUP_CONCAT( CONCAT(subject, '-'), score ORDER BY subject SEPARATOR '/' ) AS `Scores` FROM student_score GROUP BY name; 或 SELECT name AS `Name`, GROUP_CONCAT( CONCAT_WS('-', subject, score) ORDER BY subject SEPARATOR '/' ) AS `Scores` FROM student_score GROUP