在
网上
找到了内置窗口函数 row_number() 可以解决该问题。
函数处理的行的集合可以称之为一个窗口(window)。row_number() 函数可以为窗口中的每一行分配一个唯一整数,语法如下:
ROW_NUMBER() OVER(
[PARTITION BY column_1, column_2,…]
[ORDER BY column_3,column_4,…]
PARTITION BY 从句可以将窗口分成更小的集合/分区,每个集合/分区的行号从 1 开始重新增长。省略该从句,则将整个窗口视为一个集合/分区。
ORDER BY 从句决定序号的分配依据。
示例如下:
SELECT product_id, product_name, group_id, ROW_NUMBER () OVER (ORDER BY product_name) FROM products;
可惜在 8.2.4 版本的数据库中似乎不支持。
创建序列号生成器
SEQUENCE 序列对象又可称序列生成器,是一种特殊的单行表,一般用来为表的行生成唯一标识。通过 CREATE SEQUENCE 命令创建一个新的序列号生成器可以解决该问题。
CREATE SEQUENCE 语法如下:
CREATE [ TEMPORARY | TEMP ] SEQUENCE [ IF NOT EXISTS ] name [ INCREMENT [ BY ] increment ]
[ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
[ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ]
[ OWNED BY { table_name.column_name | NONE } ]
序列对象的相关函数有: