本文描述对一组值进行操作的聚合函数。它们通常与 GROUP BY 子句一起使用,以将值分组为子集。如果在不包含 GROUP BY 子句的语句中使用聚合函数,则相当于对所有行进行分组。大多数聚合函数都可以用作窗口函数。可以用这种方式使用的语句在语法描述中用 [over_clause] 表示,表示可选的 OVER 子句。对于数值参数,方差和标准偏差函数返回 DOUBLE 值。SUM() 和 AVG() 函数为精确值参数(整数或 DECIMAL)返回 DECIMAL 值,为近似值参数(FLOAT 或 DOUBLE)返回 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() 聚合函数执行位操作。在 MySQL 8.0 之前,位函数和操作符需要 BIGINT(64位整数)参数,返回 BIGINT 值,所以它们的最大范围是 64 位。在执行操作之前,非 BIGINT 参数被转换为 BIGINT,可能会发生截断。在 MySQL 8.0 中,位函数和操作符允许二进制字符串类型参数(BINARY、VARBINARY 和 BLOB 类型)并返回类似类型的值,这使它们能够接受大于 64 位参数,产生大于 64 位的返回值。● AVG([DISTINCT] expr) [over_clause]返回 expr 的平均值。DISTINCT 选项可用于返回 expr 不同值的平均值。如果存在 over_clause 子句,此函数将作为窗口函数执行。mysql> SELECT student_name, AVG(test_score)
FROM student
GROUP BY student_name;
● BIT_AND(expr) [over_clause]结果类型取决于函数参数值是作为二进制字符串计算还是作为数字计算:■ 当参数值具有二进制字符串类型,且参数不是十六进制字面量、位字面量或 NULL 字面量时,就会进行二进制字符串求值。其他情况下进行数值计算,必要时将参数值转换为无符号 64 位整数。■ 二进制字符串求值将生成与参数值长度相同的二进制字符串。如果参数值长度不相等,则会发生 ER_INVALID_BITWISE_OPERANDS_SIZE 错误。如果参数长度超过511字节,则发生 ER_INVALID_BITWISE_AGGREGATE_OPERANDS_SIZE 错误。数值计算产生一个无符号64位整数。如果没有匹配的行,BIT_AND() 返回一个与参数值长度相同的中立值(所有位设为 1)。NULL 值不会影响结果,除非所有值都是 NULL。在这种情况下,结果是一个与参数值具有相同长度的中立值。如果从 mysql 客户端调用 BIT_AND(),二进制字符串结果将使用十六进制显示,这取决于 --binary-as-hex 的值。从 MySQL 8.0.12 开始,如果存在 over_clause 子句,这个函数将作为一个窗口函数执行。● BIT_OR(expr) [over_clause]结果类型取决于函数参数值是作为二进制字符串计算还是作为数字计算:■ 当参数值具有二进制字符串类型,且参数不是十六进制字面量、位字面量或 NULL 字面量时,就会进行二进制字符串求值。其他情况下进行数值计算,必要时将参数值转换为无符号 64 位整数。■ 二进制字符串求值将生成与参数值长度相同的二进制字符串。如果参数值长度不相等,则会发生 ER_INVALID_BITWISE_OPERANDS_SIZE 错误。如果参数大小超过 511 字节,则发生 ER_INVALID_BITWISE_AGGREGATE_OPERANDS_SIZE 错误。数值计算产生一个无符号 64 位整数。如果没有匹配的行,BIT_OR() 返回一个与参数值长度相同的中立值(所有位都设置为0)。NULL 值不会影响结果,除非所有值都是 NULL。在这种情况下,结果是一个与参数值具有相同长度的中立值。如果从 mysql 客户端调用 BIT_OR(),二进制字符串结果将使用十六进制表示,取决于 --binary-as-hex 的值。从 MySQL 8.0.12 开始,如果存在 over_clause 子句,这个函数将作为一个窗口函数执行。● BIT_XOR(expr) [over_clause]结果类型取决于函数参数值是作为二进制字符串计算还是作为数字计算:■ 当参数值具有二进制字符串类型,且参数不是十六进制字面量、位字面量或 NULL 字面量时,就会进行二进制字符串求值。其他情况下进行数值计算,必要时将参数值转换为无符号 64 位整数。■ 二进制字符串求值将生成与参数值长度相同的二进制字符串。如果参数值长度不相等,则会发生 ER_INVALID_BITWISE_OPERANDS_SIZE 错误。如果参数大小超过 511 字节,则发生 ER_INVALID_BITWISE_AGGREGATE_OPERANDS_SIZE 错误。数值计算产生一个无符号 64 位整数。如果没有匹配的行,BIT_XOR() 返回一个与参数值长度相同的中立值(所有位都设置为0)。NULL 值不会影响结果,除非所有值都是 NULL。在这种情况下,结果是一个与参数值具有相同长度的中立值。如果从 mysql 客户端调用 BIT_XOR(),二进制字符串结果将使用十六进制表示,取决于 --binary-as-hex 的值。从 MySQL 8.0.12 开始,如果存在 over_clause 子句,这个函数将作为一个窗口函数执行。https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html