更新时间:2024-12-04 GMT+08:00
分享

窗口函数

窗口函数差异说明:MySQL数据库管理系统在调用窗口函数时,OVER子句中的ORDER BY子句与PARTITION BY子句不支持使用列别名,GaussDB数据库支持使用列别名。

表1 窗口函数列表

MySQL数据库

GaussDB数据库

差异

LAG()

支持,存在差异

  • 偏移量N的取值范围不同:

    MySQL中,N只允许是在范围[0, 263-1]整数值。

    GaussDB中,N只允许是在范围[0, 231-1]整数值。

  • 偏移量N的取值形式不同:
    • MySQL中,取值形式如下:
      • 常量字面量的无符号整数。
      • prepare语句中使用?声明的标记参数。
      • 用户自定义的变量。
      • 存储过程中的局部变量。
    • GaussDB中,取值形式如下:
      • 常量字面量的无符号整数。
      • 不支持在prepare语句中使用?声明的标记参数(prepare语句当前有差异)。
      • 用户自定义的变量。
      • 不支持使用存储过程中的局部变量(PLSQL当前不支持)。
  • ORDER BY子句排序时NULL值的排序不同:

    MySQL中,NULL值默认升序排在前面。

    GaussDB中,NULL值默认升序排在后面。

  • 二进制字符串显示不同:

    MySQL中,会显示二进制字符串编码成16进制后的编码值(例如'-4'会显示成编码后的0x2D34)。

    GaussDB中,会显示原字符串的值(例如'-4'会保持显示'-4')。

  • 结合CREATE TABLE AS语法创建出的表,使用DESC查看表结构时,存在以下差异:

    MySQL 8.0中:

    • 对于表中的列类型(Type)为BIGINT类型或INT类型时不显示宽度。
    • 对于表中的列类型(Type)的宽度为0时,显示宽度,如binary(0)。

    GaussDB中:

    • 对于表中的列类型(Type)为BIGINT类型或INTEGER类型时会显示宽度。
    • 对于表中的列类型(Type)的宽度为0时,不显示宽度,如binary(0)只显示成binary。
    • 表结构中标识Null和Default值的列,功能暂未实现。
  • 该函数作为子查询结合CREATE TABLE AS使用时,单独执行该函数的子查询语句没有报错或告警时:
    • GaussDB在严格模式和宽松模式下,CREATE TABLE AS语句执行成功,建表成功。
    • MySQL在严格模式下,CREATE TABLE AS语句执行可能报错,建表失败。

LEAD()

支持,存在差异

与LAG()函数差异点相同。

ROW_NUMBER()

支持,存在差异

ORDER BY子句排序时,NULL值的排序不同:

MySQL中,NULL值默认升序排在前面。

GaussDB中,NULL值默认升序排在后面。

相关文档