更新时间:2026-10-21 GMT+08:00
分享

聚合函数

表1 聚合函数列表

函数名

与MySQL的差异

AVG()

  • GaussDB中指定DISTINCT且SQL语句包含GROUP BY子句时,不对结果进行排序,MySQL会进行排序。
  • GaussDB中当expr中的列为BIT、BOOL、整数类型,且所有行的和超过BIGINT的范围时,会发生溢出导致整数翻转。
  • GaussDB中当expr中的类型为BIT类型,返回值类型为double,MySQL的返回值类型为decimal。

BIT_AND()

-

BIT_OR()

-

BIT_XOR()

-

COUNT()

GaussDB中指定DISTINCT且SQL语句包含GROUP BY子句时,不对结果进行排序,MySQL会进行排序。

GROUP_CONCAT()

  • GaussDB中指定DISTINCT且SQL语句包含GROUP BY子句时,不对结果进行排序,MySQL会进行排序。
  • GROUP_CONCAT返回类型为二进制类型时,只返回BLOB类型,其他情况返回TEXT类型。MySQL根据返回长度还会返回longtext/tinytext/longblob/tinyblob类型。
  • GaussDB中当GROUP_CONCAT参数中同时有DISTINCT和ORDER BY语法时,所有ORDER BY后的表达式必须也在DISTINCT的表达式之中。
  • GaussDB中GROUP_CONCAT(... ORDER BY 数字)不代表按照第几个参数的顺序,数字只是一个常量表达式,相当于不排序。
  • GaussDB中使用参数group_concat_max_len限制GROUP_CONCAT最大返回长度,超长截断,目前能返回的最大长度是1073741823,小于MySQL。

MAX()

  • GaussDB中指定DISTINCT且SQL语句包含GROUP BY子句时,不对结果进行排序,MySQL会进行排序。
  • 当参数为非表字段时,MAX函数、MIN函数返回值类型和MySQL 5.7不一致。
  • 当参数为float类型时,MAX函数、MIN函数的返回值结果与MySQL 5.7一致。MySQL5.7和MySQL8.0有行为差异,导致MAX函数、MIN函数嵌套CAST(expr AS FLOAT[(p)])时的返回结果与MySQL8.0有差异。
    -- GaussDB:
    m_db=# CREATE TABLE t1(c1 float);
    CREATE TABLE
    
    m_db=# INSERT INTO t1 VALUES(1.2);
    INSERT 0 1
    
    m_db=# SELECT MAX(c1) FROM t1;
            max         
    --------------------
     1.2000000476837158
    (1 row)
    
    m_db=# SELECT MAX(CAST(1.2 AS FLOAT));
            max         
    --------------------
     1.2000000476837158
    (1 row)
    
    m_db=# DROP TABLE t1;
    DROP TABLE
    
    -- MySQL 5.7:
    mysql> CREATE TABLE t1(c1 float);
    Query OK, 0 rows affected (0.02 sec)
    
    mysql> INSERT INTO t1 VALUES(1.2);
    Query OK, 1 row affected (0.00 sec)
    
    mysql> SELECT MAX(c1) FROM t1;
    +--------------------+
    | MAX(c1)            |
    +--------------------+
    | 1.2000000476837158 |
    +--------------------+
    1 row in set (0.00 sec)
    -- MySQL5.7不支持CAST(expr AS FLOAT[(p)])表达式
    mysql> SELECT MAX(CAST(1.2 AS FLOAT));
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FLOAT))' at line 1 
    
    mysql> DROP TABLE t1;
    Query OK, 0 rows affected (0.01 sec)
    
    -- MySQL 8.0:
    mysql> CREATE TABLE t1(c1 float);
    Query OK, 0 rows affected (0.03 sec)
    
    mysql> INSERT INTO t1 VALUES(1.2);
    Query OK, 1 row affected (0.00 sec)
    
    mysql> SELECT MAX(c1) FROM t1;
    +---------+
    | MAX(c1) |
    +---------+
    |     1.2 |
    +---------+
    1 row in set (0.00 sec)
    
    mysql> SELECT MAX(CAST(1.2 AS FLOAT));
    +-------------------------+
    | MAX(CAST(1.2 AS FLOAT)) |
    +-------------------------+
    |                     1.2 |
    +-------------------------+
    1 row in set (0.00 sec)
    
    mysql> DROP TABLE t1;
    Query OK, 0 rows affected (0.01 sec)

MIN()

SUM()

  • GaussDB中指定DISTINCT且SQL语句包含GROUP BY子句时,不对结果进行排序,MySQL会进行排序。
  • GaussDB中当expr中的列为BIT、BOOL、整数类型,且所有行的和超过BIGINT的范围时,会发生溢出导致整数翻转。
  • GaussDB中当expr中的类型为BIT类型,返回值类型为double,MySQL的返回值类型为decimal。

相关文档