10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国高级主任)- 41.2 mb
PDF (A4)- 41.3 mb
PDF (RPM)- 39.5 mb
HTML下载(TGZ)- 9.3 mb
HTML下载(Zip)- 9.3 mb
HTML下载(RPM)- 7.8 mb
手册页(TGZ)- 260.6 kb
手册页(Zip)- 371.8 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册节选

12.20.1聚合功能介绍

本节描述操作值集的聚合函数。它们经常和a连用集团子句将值分组为子集。

表12.25聚合函数

的名字 描述
AVG () 返回参数的平均值
BIT_AND () 按位返回AND
BIT_OR () 按位返回OR
BIT_XOR () 按位返回XOR
COUNT () 返回返回行数的计数
数(不同的) 返回多个不同值的计数
GROUP_CONCAT () 返回一个连接的字符串
JSON_ARRAYAGG () 将结果集作为单个JSON数组返回
JSON_OBJECTAGG () 将结果集作为单个JSON对象返回
MAX () 返回最大值
MIN () 返回最小值
性病() 返回总体标准差
STDDEV () 返回总体标准差
STDDEV_POP () 返回总体标准差
STDDEV_SAMP () 返回样本标准差
SUM () 返回和
VAR_POP () 返回总体标准方差
VAR_SAMP () 返回样本方差
方差() 返回总体标准方差

除非另有说明,聚合函数将忽略值。

如果在包含no的语句中使用聚合函数集团子句,它相当于对所有行进行分组。有关更多信息,请参见第12.20.3节,“MySQL处理GROUP BY”

大多数聚合函数都可以用作窗口函数。可以以这种方式使用的那些在其语法描述中由表示over_clause,表示可选的条款。over_clause描述在第12.21.2节,“窗口函数概念和语法”,其中还包括有关窗口函数使用的其他信息。

对于数值参数,方差和标准偏差函数返回a价值。的SUM ()而且AVG ()函数返回小数值为精确值参数(整数或小数),以及值的近似值参数(浮动).

SUM ()而且AVG ()聚合函数不适用于时态值。(它们将值转换为数字,丢失第一个非数字字符之后的所有内容。)要解决此问题,请转换为数值单位,执行聚合操作,然后转换回时间值。例子:

选择SEC_TO_TIME(总和(TIME_TO_SEC (time_col)))tbl_name;选择FROM_DAYS(总和(TO_DAYS (date_col)))tbl_name

函数如SUM ()AVG (),在必要时将实参转换为数字。为枚举值时,强制转换操作将使用基础数值。

BIT_AND ()BIT_OR (),BIT_XOR ()聚合函数执行位操作。在MySQL 8.0之前,需要位函数和操作符长整型数字(64位整数)参数并返回长整型数字值,所以它们的最大范围是64位。非长整型数字参数被转换为长整型数字在执行操作之前,可能会发生截断。

在MySQL 8.0中,位函数和操作符允许二进制字符串类型参数(二进制VARBINARY,以及类型)并返回类似类型的值,这使它们能够接受参数并产生大于64位的返回值。有关位操作的实参求值和结果类型的讨论,请参阅中的介绍性讨论第12.13节“位函数和操作符”

  • AVG((不同的)expr) [over_clause

    的平均值expr.的截然不同的选项可用于返回的不同值的平均值expr

    如果没有匹配的行,AVG ()返回

    此函数作为窗口函数执行over_clause是礼物。over_clause如所述第12.21.2节,“窗口函数概念和语法”;它不能与截然不同的

    mysql> SELECT student_name, AVG(test_score) FROM student GROUP BY student_name;
  • BIT_AND (expr) [over_clause

    按位返回所有的比特expr

    结果类型取决于函数实参值是作为二进制字符串还是数字进行计算:

    • 当实参值为二进制字符串类型,且实参不是十六进制字面值、位字面值或文字。数值计算则不然,必要时将参数值转换为无符号64位整数。

    • 二进制字符串求值产生与实参值相同长度的二进制字符串。如果参数值的长度不相等,则为ER_INVALID_BITWISE_OPERANDS_SIZE发生错误。如果参数大小超过511字节,则会触发ER_INVALID_BITWISE_AGGREGATE_OPERANDS_SIZE发生错误。数值计算产生一个无符号64位整数。

    如果没有匹配的行,BIT_AND ()返回一个与参数值长度相同的中性值(所有位都设置为1)。

    值不会影响结果,除非所有值都影响结果.在这种情况下,结果是一个与参数值长度相同的中性值。

    有关参数求值和结果类型的详细信息讨论,请参阅中的介绍讨论第12.13节“位函数和操作符”

    如果BIT_AND ()mysql客户机时,二进制字符串结果使用十六进制表示法显示,具体值取决于——binary-as-hex.有关该选项的详细信息,请参见章节4.5.1,“mysql - mysql命令行客户端”

    从MySQL 8.0.12开始,这个函数作为窗口函数执行over_clause是礼物。over_clause如所述第12.21.2节,“窗口函数概念和语法”

  • BIT_OR (expr) [over_clause

    按位返回所有的比特expr

    结果类型取决于函数实参值是作为二进制字符串还是数字进行计算:

    • 当实参值为二进制字符串类型,且实参不是十六进制字面值、位字面值或文字。数值计算则不然,必要时将参数值转换为无符号64位整数。

    • 二进制字符串求值产生与实参值相同长度的二进制字符串。如果参数值的长度不相等,则为ER_INVALID_BITWISE_OPERANDS_SIZE发生错误。如果参数大小超过511字节,则会触发ER_INVALID_BITWISE_AGGREGATE_OPERANDS_SIZE发生错误。数值计算产生一个无符号64位整数。

    如果没有匹配的行,BIT_OR ()返回一个中性值(所有位都设置为0),其长度与参数值相同。

    值不会影响结果,除非所有值都影响结果.在这种情况下,结果是一个与参数值长度相同的中性值。

    有关参数求值和结果类型的详细信息讨论,请参阅中的介绍讨论第12.13节“位函数和操作符”

    如果BIT_OR ()mysql客户机时,二进制字符串结果使用十六进制表示法显示,具体值取决于——binary-as-hex.有关该选项的详细信息,请参见章节4.5.1,“mysql - mysql命令行客户端”

    从MySQL 8.0.12开始,这个函数作为窗口函数执行over_clause是礼物。over_clause如所述第12.21.2节,“窗口函数概念和语法”

  • BIT_XOR (expr) [over_clause

    按位返回XOR所有的比特expr

    结果类型取决于函数实参值是作为二进制字符串还是数字进行计算:

    • 当实参值为二进制字符串类型,且实参不是十六进制字面值、位字面值或文字。数值计算则不然,必要时将参数值转换为无符号64位整数。

    • 二进制字符串求值产生与实参值相同长度的二进制字符串。如果参数值的长度不相等,则为ER_INVALID_BITWISE_OPERANDS_SIZE发生错误。如果参数大小超过511字节,则会触发ER_INVALID_BITWISE_AGGREGATE_OPERANDS_SIZE发生错误。数值计算产生一个无符号64位整数。

    如果没有匹配的行,BIT_XOR ()返回一个中性值(所有位都设置为0),其长度与参数值相同。

    值不会影响结果,除非所有值都影响结果.在这种情况下,结果是一个与参数值长度相同的中性值。

    有关参数求值和结果类型的详细信息讨论,请参阅中的介绍讨论第12.13节“位函数和操作符”

    如果BIT_XOR ()mysql客户机时,二进制字符串结果使用十六进制表示法显示,具体值取决于——binary-as-hex.有关该选项的详细信息,请参见章节4.5.1,“mysql - mysql命令行客户端”

    从MySQL 8.0.12开始,这个函数作为窗口函数执行over_clause是礼物。over_clause如所述第12.21.2节,“窗口函数概念和语法”

  • 计数(expr) [over_clause

    返回非的个数的计数的值expr在a检索的行中选择声明。结果是长整型数字价值。

    如果没有匹配的行,COUNT ()返回0

    此函数作为窗口函数执行over_clause是礼物。over_clause如所述第12.21.2节,“窗口函数概念和语法”

    mysql> SELECT student.student_name,COUNT(*) FROM student.student_id=course WHERE student.student_id=course。GROUP BY student_name;

    COUNT (*)它返回检索到的行数的计数,无论它们是否包含值。

    对于事务性存储引擎,例如InnoDB,存储准确的行数是有问题的。多个事务可能同时发生,每一个事务都可能影响计数。

    InnoDB不保持表中的行内部计数,因为并发事务可能看到同一时间不同数量的行。因此,SELECT COUNT (*)语句只计算当前事务可见的行。

    从MySQL 8.0.13开始,选择count (*) fromtbl_name查询性能InnoDB表是针对单线程工作负载优化的,如果没有额外的子句,例如在哪里集团

    InnoDB流程SELECT COUNT (*)语句,遍历最小的可用二级索引,除非索引或优化器提示指示优化器使用不同的索引。如果二级索引不存在,InnoDB流程SELECT COUNT (*)语句,扫描聚集索引。

    处理SELECT COUNT (*)如果索引记录不完全在缓冲池中,语句将花费一些时间。为了更快地进行计数,可以创建一个计数器表,并让应用程序根据它所做的插入和删除来更新它。但是,在数千个并发事务对同一个计数器表发起更新的情况下,这种方法可能无法很好地扩展。如果近似的行数足够,则使用显示表状态

    InnoDB处理SELECT COUNT (*)而且选择统计(1)操作方法相同。没有性能差异。

    MyISAM表,COUNT (*)被优化为很快返回如果选择从一个表检索,不检索其他列,并且没有在哪里条款。例如:

    SELECT COUNT(*) FROM student;

    此优化仅适用于MyISAM表,因为为这个存储引擎存储了精确的行数,并且可以非常快速地访问。数(1)只有当第一列定义为非空

  • 计数(不同的expr,[expr…)

    返回具有不同非的行数的计数expr值。

    如果没有匹配的行,数(不同的)返回0

    mysql> SELECT COUNT(DISTINCT results) FROM student

    在MySQL中,您可以获得不包含的不同表达式组合的数量通过给出一个表达式列表。在标准SQL中,您必须对其中的所有表达式进行连接计数(不同的…)

  • GROUP_CONCAT (expr

    此函数返回一个带有连接非的字符串结果组中的值。它返回如果没有非值。完整的语法如下:

    GROUP_CONCAT([的]expr(,expr...][命令{unsigned_integer|col_name|expr} [asc | desc] [,col_name...]][分隔符str_val])
    mysql> SELECT test_score FROM student GROUP BY student_name;

    或者:

    mysql> SELECT test_score, GROUP_CONCAT(DISTINCT test_score ORDER BY test_score DESC SEPARATOR ' ') FROM student GROUP

    在MySQL中,您可以获得表达式组合的连接值。若要消除重复值,请使用截然不同的条款。要对结果中的值排序,请使用命令条款。要按相反顺序排序,请添加DESC属性中要排序的列的名称命令条款。默认为升序;属性可以显式地指定ASC关键字。组中值之间的默认分隔符是逗号().若要显式指定分隔符,请使用分隔符后面跟着应该插入组值之间的字符串字面值。若要完全消除分隔符,请指定分隔符”

    方法给出的最大长度截断结果group_concat_max_len系统变量,默认值为1024。的值可以设置得更高,但是返回值的有效最大长度受到的值的约束max_allowed_packet.的值的语法group_concat_max_len在运行时,如下所示瓦尔为无符号整数:

    SET [GLOBAL | SESSION] group_concat_max_len =瓦尔

    返回值是一个非二进制或二进制字符串,这取决于参数是非二进制还是二进制字符串。结果类型为文本除非group_concat_max_len小于或等于512,在这种情况下,结果类型是VARCHARVARBINARY

    如果GROUP_CONCAT ()mysql客户机时,二进制字符串结果使用十六进制表示法显示,具体值取决于——binary-as-hex.有关该选项的详细信息,请参见章节4.5.1,“mysql - mysql命令行客户端”

    另请参阅CONCAT ()而且CONCAT_WS ()第12.8节“字符串函数和操作符”

  • JSON_ARRAYAGG (col_or_expr) [over_clause

    将结果集聚合为单个结果集JSON数组,其元素由行组成。此数组中元素的顺序未定义。该函数作用于求值为单个值的列或表达式。返回如果结果不包含行,或者发生错误。

    从MySQL 8.0.14开始,这个函数作为窗口函数执行over_clause是礼物。over_clause如所述第12.21.2节,“窗口函数概念和语法”

    mysql> SELECT o_id, attribute, value FROM t3;+------+-----------+-------+ | o_id | |属性值  | +------+-----------+-------+ | 2 | |红色| | 2 | |丝绸| | 3 |色绿色| | | 3 | |广场形状 | +------+-----------+-------+ 4行集(0.00秒)mysql >选择o_id JSON_ARRAYAGG(属性)属性> o_id t3组;+------+---------------------+ | o_id |属性  | +------+---------------------+ | 2 |(“颜色”,“结构”)| | 3 |(“颜色”、“形状 "] | +------+---------------------+ 2行集(0.00秒)
  • JSON_OBJECTAGG (关键价值) [over_clause

    接受两个列名或表达式作为参数,第一个列名或表达式用作键,第二个列名或表达式用作值,并返回一个包含键-值对的JSON对象。返回如果结果不包含行,或者发生错误。如果任何密钥名称为,则会发生错误或者参数的个数不等于2。

    从MySQL 8.0.14开始,这个函数作为窗口函数执行over_clause是礼物。over_clause如所述第12.21.2节,“窗口函数概念和语法”

    mysql> SELECT o_id, attribute, value FROM t3;+------+-----------+-------+ | o_id | |属性值  | +------+-----------+-------+ | 2 | |红色| | 2 | |丝绸| | 3 |色绿色| | | 3 | |广场形状 | +------+-----------+-------+ 4行集(0.00秒)mysql >选择o_id JSON_OBJECTAGG(属性,值)> o_id t3组;+------+---------------------------------------+ | o_id | JSON_OBJECTAGG(属性值 ) | +------+---------------------------------------+ | 2 |{“颜色”:“红色”、“织物”:“丝绸”}| | 3 |{“颜色”:“绿色”、“形状”:“广场 "} | +------+---------------------------------------+ 2行集(0.00秒)

    重复键处理。当规范化此函数的结果时,具有重复键的值将被丢弃。与MySQL保持一致JSON不允许重复键的数据类型规范,则仅在返回对象中与该键一起使用遇到的最后一个值(最后一个重复的密钥获胜).这意味着对a中的列使用此函数的结果选择可能取决于行返回的顺序,但这并不保证。

    当作为窗口函数使用时,如果在一帧中有重复的键,结果中只显示该键的最后一个值。,则帧中最后一行键的值是确定的命令规范保证值具有特定的顺序。如果不是,则键的结果值是不确定的。

    考虑以下几点:

    mysql> CREATE TABLE t(c VARCHAR(10), i INT);mysql> INSERT INTO t VALUES ('key', 3), ('key', 4), ('key', 5);查询OK, 3行影响(0.10秒)记录:3重复:0警告:0 mysql> SELECT c, i FROM t;+------+------+ | c |我  | +------+------+ | 关键关键| 3 | | | 4 | | | 5的关键  | +------+------+ 3行集(0.00秒)mysql >选择JSON_OBJECTAGG从t (c i);+----------------------+ | JSON_OBJECTAGG (c,我 ) | +----------------------+ | {" 关键”:5 } | +----------------------+ 1行集(0.00秒)mysql >删除从t;mysql> INSERT INTO t VALUES ('key', 3), ('key', 5), ('key', 4);查询OK, 3行影响(0.06秒)记录:3重复:0警告:0 mysql> SELECT c, i FROM t;+------+------+ | c |我  | +------+------+ | 关键关键| 3 | | | 5 | | | 4的关键  | +------+------+ 3行集(0.00秒)mysql >选择JSON_OBJECTAGG从t (c i);+----------------------+ | JSON_OBJECTAGG (c,我 ) | +----------------------+ | {" 键”:4 } | +----------------------+ 1行集(0.00秒)

    从最后一个查询中选择的键是不确定的。如果您喜欢特定的键顺序,您可以调用JSON_OBJECTAGG ()作为一个窗口函数带有一个命令对帧行施加特定顺序的规范。下面的例子展示了使用和不使用时会发生什么命令对于一些不同的框架规格。

    没有命令,帧为整个分区:

    mysql> SELECT JSON_OBJECTAGG(c, i) OVER () AS json_object FROM t;+-------------+ | json_object  | +-------------+ | {" 关键”:4}| |{“关键”:4}| |{“关键”:4 } | +-------------+

    命令,其中帧是的默认值无界前行和当前行之间的范围(按升序和降序排列):

    SELECT JSON_OBJECTAGG(c, i) OVER (ORDER BY i) AS json_object FROM t;+-------------+ | json_object  | +-------------+ | {" 关键”:3}| |{“关键”:4}| |{“关键”:5 } | +-------------+ mysql >选择JSON_OBJECTAGG (c i)在(按我DESC) json_object从t;+-------------+ | json_object  | +-------------+ | {" 关键”:5}| |{“关键”:4}| |{“关键”:3 } | +-------------+

    命令以及整个分区的显式框架:

    mysql> SELECT JSON_OBJECTAGG(c, i) OVER (ORDER BY i ROWS BETWEEN UNBOUNDED previous AND UNBOUNDED FOLLOWING) AS json_object FROM t;+-------------+ | json_object  | +-------------+ | {" 关键”:5}| |{“关键”:5}| |{“关键”:5 } | +-------------+

    若要返回特定的键值(例如最小或最大键值),请包含限制子句中。例如:

    mysql> SELECT JSON_OBJECTAGG(c, i) OVER (ORDER BY i) AS json_object FROM t LIMIT 1;+-------------+ | json_object  | +-------------+ | {" 键”:3 } | +-------------+ mysql >选择JSON_OBJECTAGG (c i)在(按我DESC) json_object从t限制1;+-------------+ | json_object  | +-------------+ | {" 关键”:5 } | +-------------+

    看到JSON值的规范化、合并和自动包装,以了解更多资料及例子。

  • MAX((不同的)expr) [over_clause

    的最大值exprMAX ()可接受字符串参数;在这种情况下,它返回最大字符串值。看到章节8.3.1,“MySQL如何使用索引”.的截然不同的关键字可用于查找的不同值的最大值expr,然而,这产生了与省略相同的结果截然不同的

    如果没有匹配的行,MAX ()返回

    此函数作为窗口函数执行over_clause是礼物。over_clause如所述第12.21.2节,“窗口函数概念和语法”;它不能与截然不同的

    mysql> SELECT student_name, MIN(test_score), MAX(test_score) FROM student GROUP BY student_name

    MAX (), MySQL当前比较枚举而且按字符串值列,而不是按字符串在集合中的相对位置列。这不同于命令对两者进行比较。

  • MIN((不同的)expr) [over_clause

    的最小值exprMIN ()可接受字符串参数;在这种情况下,它返回最小字符串值。看到章节8.3.1,“MySQL如何使用索引”.的截然不同的关键字可用于查找的不同值的最小值expr,然而,这产生了与省略相同的结果截然不同的

    如果没有匹配的行,MIN ()返回

    此函数作为窗口函数执行over_clause是礼物。over_clause如所述第12.21.2节,“窗口函数概念和语法”;它不能与截然不同的

    mysql> SELECT student_name, MIN(test_score), MAX(test_score) FROM student GROUP BY student_name

    MIN (), MySQL当前比较枚举而且按字符串值列,而不是按字符串在集合中的相对位置列。这不同于命令对两者进行比较。

  • 性病(expr) [over_clause

    返回的总体标准差expr性病()是标准SQL函数的同义词吗STDDEV_POP (),作为MySQL扩展提供。

    如果没有匹配的行,性病()返回

    此函数作为窗口函数执行over_clause是礼物。over_clause如所述第12.21.2节,“窗口函数概念和语法”

  • STDDEV (expr) [over_clause

    返回的总体标准差exprSTDDEV ()是标准SQL函数的同义词吗STDDEV_POP (),提供了与Oracle的兼容性。

    如果没有匹配的行,STDDEV ()返回

    此函数作为窗口函数执行over_clause是礼物。over_clause如所述第12.21.2节,“窗口函数概念和语法”

  • STDDEV_POP (expr) [over_clause

    返回的总体标准差expr的平方根VAR_POP ()).你也可以使用性病()STDDEV (),它们是等价的,但不是标准的SQL。

    如果没有匹配的行,STDDEV_POP ()返回

    此函数作为窗口函数执行over_clause是礼物。over_clause如所述第12.21.2节,“窗口函数概念和语法”

  • STDDEV_SAMP (expr) [over_clause

    的样本标准差expr的平方根VAR_SAMP ()

    如果没有匹配的行,STDDEV_SAMP ()返回

    此函数作为窗口函数执行over_clause是礼物。over_clause如所述第12.21.2节,“窗口函数概念和语法”

  • SUM((不同的)expr) [over_clause

    返回expr.如果返回集没有行,SUM ()返回.的截然不同的关键字只能用于的不同值求和expr

    如果没有匹配的行,SUM ()返回

    此函数作为窗口函数执行over_clause是礼物。over_clause如所述第12.21.2节,“窗口函数概念和语法”;它不能与截然不同的

  • VAR_POP (expr) [over_clause

    返回的总体标准方差expr.它把行数视为总体,而不是样本,所以它把行数作为分母。你也可以使用方差(),这是等价的,但不是标准SQL。

    如果没有匹配的行,VAR_POP ()返回

    此函数作为窗口函数执行over_clause是礼物。over_clause如所述第12.21.2节,“窗口函数概念和语法”

  • VAR_SAMP (expr) [over_clause

    的样本方差expr.也就是说,分母是行数减1。

    如果没有匹配的行,VAR_SAMP ()返回

    此函数作为窗口函数执行over_clause是礼物。over_clause如所述第12.21.2节,“窗口函数概念和语法”

  • 方差(expr) [over_clause

    返回的总体标准方差expr方差()是标准SQL函数的同义词吗VAR_POP (),作为MySQL扩展提供。

    如果没有匹配的行,方差()返回

    此函数作为窗口函数执行over_clause是礼物。over_clause如所述第12.21.2节,“窗口函数概念和语法”