MySQL 5.7 聚合(GROUP BY)功能描述
转载自 MySQL 5.7 聚合(GROUP BY)功能描述
12.19.1聚合(GROUP BY)功能描述
本节介绍对值集合进行操作的组(聚合)函数。
表12.25聚合(GROUP BY)函数
名称 | 描述 |
---|---|
AVG()
|
返回参数的平均值 |
BIT_AND()
|
按位返回AND |
BIT_OR()
|
按位返回OR |
BIT_XOR()
|
按位返回异或 |
COUNT()
|
返回返回的行数 |
COUNT(DISTINCT)
|
返回许多不同值的计数 |
GROUP_CONCAT()
|
返回一个连接的字符串 |
JSON_ARRAYAGG()
|
将结果集作为单个JSON数组返回 |
JSON_OBJECTAGG()
|
将结果集作为单个JSON对象返回 |
MAX()
|
返回最大值 |
MIN()
|
返回最小值 |
STD()
|
返回人口标准差 |
STDDEV()
|
返回人口标准差 |
STDDEV_POP()
|
返回人口标准差 |
STDDEV_SAMP()
|
返回样本标准差 |
SUM()
|
归还总和 |
VAR_POP()
|
返回人口标准差异 |
VAR_SAMP()
|
返回样本方差 |
VARIANCE()
|
返回人口标准差异 |
除非另有说明,否则组函数会忽略 NULL
值。
如果在包含无GROUP BY
子句的语句中使用组函数 ,则它等同于对所有行进行分组。有关更多信息,请参见 第12.19.3节“GROUP BY的MySQL处理”。
对于数字参数,方差和标准差函数返回一个DOUBLE
值。的SUM()
和 AVG()
函数返回一个 DECIMAL
为准确值参数(整数或值DECIMAL
),以及DOUBLE
为近似值参数(值FLOAT
或 DOUBLE
)。
在SUM()
和 AVG()
聚合函数不具有时间价值的工作。(它们将值转换为数字,在第一个非数字字符后丢失所有内容。)要解决此问题,请转换为数字单位,执行聚合操作,然后转换回时间值。例子:
SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col))) FROM tbl_name;
SELECT FROM_DAYS(SUM(TO_DAYS(date_col))) FROM tbl_name;
如果需要, 诸如SUM()
或 AVG()
期望数字参数的函数将参数强制转换为数字。对于 SET
或 ENUM
值,强制转换操作会导致使用基础数值。
的BIT_AND()
, BIT_OR()
和 BIT_XOR()
聚合函数执行位操作。它们需要 BIGINT
(64位整数)参数并返回BIGINT
值。其他类型的参数将转换为 BIGINT
可能发生截断。有关在MySQL 8.0的变化,允许位操作采取二进制字符串类型参数(信息BINARY
, VARBINARY
和 BLOB
类型),见 12.12节,“位函数和操作符”。
-
返回的平均值
。该expr
DISTINCT
选项可用于返回不同值的平均值expr
。如果没有匹配的行,则
AVG()
返回NULL
。SELECT student_name, AVG(test_score)FROM studentGROUP BY student_name;
-
返回
AND
所有位的按位expr
。计算以64位(BIGINT
)精度执行。如果没有匹配的行,则
BIT_AND()
返回中性值(所有位设置为1)。 -
返回
OR
所有位的按位expr
。计算以64位(BIGINT
)精度执行。如果没有匹配的行,则
BIT_OR()
返回中性值(所有位都设置为0)。 -
返回
XOR
所有位的按位expr
。计算以64位(BIGINT
)精度执行。如果没有匹配的行,则
BIT_XOR()
返回中性值(所有位都设置为0)。 -
返回 语句检索的行中非
NULL
值数的计数。结果是一个 值。expr
SELECT
BIGINT
如果没有匹配的行,则
COUNT()
返回0
。SELECT student.student_name,COUNT(*)FROM student,courseWHERE student.student_id=course.student_idGROUP BY student_name;
COUNT(*)
有点不同,它返回检索的行数的计数,无论它们是否包含NULL
值。对于事务存储引擎,例如
InnoDB
,存储精确的行数是有问题的。多个交易可能同时发生,每个交易都可能影响计数。InnoDB
不保留表中的内部行数,因为并发事务可能同时 “ 看到 ”不同数量的行。因此,SELECT COUNT(*)
语句只计算当前事务可见的行。在MySQL 5.7.18之前,通过扫描聚簇索引来
InnoDB
处理SELECT COUNT(*)
语句。从MySQL 5.7.18开始, 通过遍历最小的可用二级索引来InnoDB
处理SELECT COUNT(*)
语句,除非索引或优化器提示指示优化器使用不同的索引。如果不存在辅助索引,则扫描聚簇索引。SELECT COUNT(*)
如果索引记录不完全在缓冲池中,则 处理语句需要一些时间。为了更快地计算,请创建一个计数器表,让应用程序根据插入和删除更新它。但是,在数千个并发事务正在启动对同一计数器表的更新的情况下,此方法可能无法很好地扩展。如果大概行数足够,请使用SHOW TABLE STATUS
。InnoDB
以相同的方式处理SELECT COUNT(*)
和SELECT COUNT(1)
操作。没有性能差异。对于
MyISAM
表,COUNT(*)
如果SELECT
从一个表检索,没有检索到其他列,并且没有WHERE
子句, 则优化为非常快速地返回 。例如:SELECT COUNT(*) FROM student;
此优化仅适用于
MyISAM
表,因为为此存储引擎存储了精确的行数,并且可以非常快速地访问。COUNT(1)
如果第一列定义为,则仅受相同优化的影响NOT NULL
。 COUNT(DISTINCT
expr
,[expr
...])返回具有不同非
NULL
expr
值的行数。如果没有匹配的行,则
COUNT(DISTINCT)
返回0
。SELECT COUNT(DISTINCT results) FROM student;
在MySQL中,您可以
NULL
通过提供表达式列表来获取不包含的不同表达式组合的数量。在标准SQL中,您必须对内部的所有表达式进行连接COUNT(DISTINCT ...)
。-
此函数返回字符串结果,其中
NULL
包含来自组的连接非值。NULL
如果没有非NULL
值,则返回 。完整语法如下:GROUP_CONCAT([DISTINCT] expr [,expr ...][ORDER BY {unsigned_integer | col_name | expr}[ASC | DESC] [,col_name ...]][SEPARATOR str_val])
SELECT student_name, GROUP_CONCAT(test_score) FROM student GROUP BY student_name;
要么:
SELECT student_name, GROUP_CONCAT(DISTINCT test_score ORDER BY test_score DESC SEPARATOR ' ') FROM student GROUP BY student_name;
在MySQL中,您可以获得表达式组合的连接值。要消除重复值,请使用该
DISTINCT
子句。要对结果中的值进行排序,请使用该ORDER BY
子句。要按相反顺序排序,请将DESC
(descending)关键字添加到要在ORDER BY
子句中排序的列的名称中。默认为升序; 这可以使用ASC
关键字明确指定。组中值之间的默认分隔符是逗号(,
)。要明确指定分隔符,请使用SEPARATOR
后跟应在组值之间插入的字符串文字值。要完全消除分隔符,请指定SEPARATOR ''
。结果被截断为
group_concat_max_len
系统变量给出的最大长度,其默认值为1024.尽管返回值的有效最大长度受值的约束,但该值可以设置得更高max_allowed_packet
。group_concat_max_len
在运行时更改值的语法 如下,其中val
是无符号整数:SET [GLOBAL | SESSION] group_concat_max_len = val;
返回值是非二进制或二进制字符串,具体取决于参数是非二进制还是二进制字符串。结果类型是
TEXT
或者BLOB
除非group_concat_max_len
小于或等于512,在这种情况下结果类型是VARCHAR
或VARBINARY
。另见
CONCAT()
和CONCAT_WS()
: 第12.5节“字符串函数”。 -
将结果集聚合为单个
JSON
数组,其元素由行组成。此数组中元素的顺序未定义。该函数作用于计算为单个值的列或表达式。返回NULL
如果结果不包含任何行,或在错误的事件。mysql> SELECT o_id, attribute, value FROM t3; +------+-----------+-------+ | o_id | attribute | value | +------+-----------+-------+ | 2 | color | red | | 2 | fabric | silk | | 3 | color | green | | 3 | shape | square| +------+-----------+-------+ 4 rows in set (0.00 sec)mysql> SELECT o_id, JSON_ARRAYAGG(attribute) AS attributes > FROM t3 GROUP BY o_id; +------+---------------------+ | o_id | attributes | +------+---------------------+ | 2 | ["color", "fabric"] | | 3 | ["color", "shape"] | +------+---------------------+ 2 rows in set (0.00 sec)
在MySQL 5.7.22中添加。
-
将两个列名或表达式作为参数,第一个用作键,第二个用作值,并返回包含键值对的JSON对象。返回
NULL
如果结果不包含任何行,或在错误的事件。如果任何键名称NULL
或参数数量不等于2,则会发生错误。mysql> SELECT o_id, attribute, value FROM t3; +------+-----------+-------+ | o_id | attribute | value | +------+-----------+-------+ | 2 | color | red | | 2 | fabric | silk | | 3 | color | green | | 3 | shape | square| +------+-----------+-------+ 4 rows in set (0.00 sec)mysql> SELECT o_id, JSON_OBJECTAGG(attribute, value) FROM t3 GROUP BY o_id; +------+----------------------------------------+ | o_id | JSON_OBJECTAGG(attribute, name) | +------+----------------------------------------+ | 2 | {"color": "red", "fabric": "silk"} | | 3 | {"color": "green", "shape": "square"} | +------+----------------------------------------+ 1 row in set (0.00 sec)
在MySQL 5.7.22中添加。
-
返回的最大值
expr
。MAX()
可以采用字符串参数; 在这种情况下,它返回最大字符串值。请参见第8.3.1节“MySQL如何使用索引”。的DISTINCT
关键字可用于以找到最大的不同值中的expr
,然而,这产生相同的结果作为遗漏DISTINCT
。如果没有匹配的行,则
MAX()
返回NULL
。SELECT student_name, MIN(test_score), MAX(test_score)FROM studentGROUP BY student_name;
因为
MAX()
,MySQL当前按字符串值比较ENUM
和SET
列,而不是字符串在集合中的相对位置。这与ORDER BY
比较它们的方式不同。 -
返回的最小值
expr
。MIN()
可以采用字符串参数; 在这种情况下,它返回最小字符串值。请参见第8.3.1节“MySQL如何使用索引”。的DISTINCT
关键字可用来找到最小的不同值中的expr
,然而,这产生相同的结果作为遗漏DISTINCT
。如果没有匹配的行,则
MIN()
返回NULL
。SELECT student_name, MIN(test_score), MAX(test_score)FROM studentGROUP BY student_name;
因为
MIN()
,MySQL当前按字符串值比较ENUM
和SET
列,而不是字符串在集合中的相对位置。这与ORDER BY
比较它们的方式不同。 -
返回总体的人口标准差
expr
。STD()
是标准SQL函数的同义词STDDEV_POP()
,作为MySQL扩展提供。如果没有匹配的行,则
STD()
返回NULL
。 -
返回总体的人口标准差
expr
。STDDEV()
是STDDEV_POP()
与Oracle兼容的标准SQL函数的同义词 。如果没有匹配的行,则
STDDEV()
返回NULL
。 -
返回
expr
(平方根VAR_POP()
)的总体标准差 。您也可以使用STD()
或STDDEV()
,它们是等效的但不是标准的SQL。如果没有匹配的行,则
STDDEV_POP()
返回NULL
。 -
返回样本标准差
expr
(的平方根)VAR_SAMP()
。如果没有匹配的行,则
STDDEV_SAMP()
返回NULL
。 -
返回的总和
expr
。如果返回集没有行,则SUM()
返回NULL
。的DISTINCT
关键字可用来仅求和的不同的值expr
。如果没有匹配的行,则
SUM()
返回NULL
。 -
返回人口标准方差
expr
。它将行视为整个总体,而不是作为样本,因此它将行数作为分母。您也可以使用VARIANCE()
,这是等效的但不是标准SQL。如果没有匹配的行,则
VAR_POP()
返回NULL
。 -
返回样本方差
expr
。也就是说,分母是行数减1。如果没有匹配的行,则
VAR_SAMP()
返回NULL
。 -
返回人口标准方差
expr
。VARIANCE()
是标准SQL函数的同义词VAR_POP()
,作为MySQL扩展提供。如果没有匹配的行,则
VARIANCE()
返回NULL
。
MySQL 5.7 聚合(GROUP BY)功能描述相关推荐
- mysql单列去重复group by分组取每组前几条记录加order by排序
<div class="post"><h1 class="postTitle"><a id="cb_post_title ...
- MySQL 8.0开始Group by不再排序
如题所示,mysql 8.0 开始 group by 默认是没有排序的 那mysql 8.0 之前和 8.0 就有可能结果出现不同 需要警惕 查看版本信息 root@mysql3306.sock> ...
- MySQL中distinct和group by性能比较
MySQL中distinct和group by性能比较[转] 之前看了网上的一些测试,感觉不是很准确,今天亲自测试了一番.得出了结论(仅在个人计算机上测试,可能不全面,仅供参考) 测试过程: 准备一张 ...
- MySQL 5.7.20 Group Relication(组复制)搭建手册
本博文介绍了Group Replication的两种工作模式的架构. 并详细介绍了Single-Master Mode的部署过程,以及如何切换到Multi-Master Mode. 当然,文末给出了G ...
- MySQL 5.7.17 Group Relication(组复制)搭建手册【转】
本博文介绍了Group Replication的两种工作模式的架构. 并详细介绍了Single-Master Mode的部署过程,以及如何切换到Multi-Master Mode. 当然,文末给出了G ...
- MySQL 5.7.17 Group Relication(组复制)搭建手册
本博文介绍了Group Replication的两种工作模式的架构. 并详细介绍了Single-Master Mode的部署过程,以及如何切换到Multi-Master Mode. 当然,文末给出了G ...
- Mysql —— 多行/聚合/分组函数 打字练习
Mysql -- 多行/聚合/分组函数 打字练习 工欲善其事,必先利其器--首先我们需要有打字练习的工具 ,这里我推荐的是 金山打字通,下载链接为
- 【Python数据分析与处理 实训03】 --- 酒类消费信息分析(数据分组聚合 group().agg()应用)
[Python数据分析与处理 实训03] - 酒类消费信息分析(数据分组聚合 group().agg()应用) 探索酒类消费信息 对于下面的数据集进行简单的一些数据的分析训练 若需要源数据请私信~ 1 ...
- mysql 聚集函数与group by,聚集函数可以和where一起用吗 聚合函数如何与group by函数一起使用...
SQL中where语句能用聚合函数吗?聚合函数应该用在having子句中. 聚合函数如果想用在where中的话,应该只能用子查询来实现(在子查询中进行聚合函数计算,然后在主查询中进行where判断). ...
最新文章
- python 列表list 合并的方法
- java通过jdbc登陆系统_JDBC模拟登录
- Unknown opcode
- 光纤收发器和光电转换器有什么区别?
- 语文高考识记现代汉字的字形【转】
- ubuntu双系统导致进windows花屏
- dubbo 2.8.4(dubbox)的jar包制作【添加到maven本地仓库】
- 腾讯云TDSQL TCP干货
- Vue前端验证一个text只能输入手机号或邮箱
- qpython3l_qpython3例子
- html空格符的代码用转义字符怎么表示,html空格符号标签 空格符号怎么打出来HTML?...
- 笔记本电脑硬盘坏了怎么办?笔记本硬盘坏了修复技巧
- 计算机专业英语谐音大全,英语单词谐音记忆法汇总整理
- 智力问答选择题_智力问答题题库
- std::future、std::promise、std::packaged_task、std::async
- 项目延期,不重视过程项目团队将自食其果
- 《白夜追凶》的黑客水平怎么样?终于有部国产剧没有把黑客当神了
- 26个音序的正确写法和占格_26个音序表怎么读(拼音音序表的正确写法)
- 基于Highcharts的仪表盘设计
- iOS及Mac开源资料
热门文章
- leetcode518. 零钱兑换 II
- [JavaWeb-Servlet]概述与快速入门
- Millenium Leapcow POJ - 2111 (千禧年跳牛)(贪心找最长路径,记忆化)
- python高级编程知识点_(转)python 高级编程技巧学习笔记
- SQL(八)- python执行SQL语句
- c语言学生成绩查询课设报告,C语言课设报告(学生考试成绩查询程序)【荐】.doc...
- 多版本opencv 兼容
- 深入理解 JVM Class文件格式(九)
- kettle同步数据中文乱码问题解决
- 同余最短路(P3403 跳楼机)