本来是用mysql好好的,因为代码迁移到 postgresql。所以出问题了呗。
事情是这样的,我们在查询结果中临时一列作为从1开始的序列号。
脱敏后的sql
SELECT
( @i := @i + 1 ) num,
M.id
FROM
tb_order M,
( SELECT @i := 0 ) AS ID
GROUP BY
M.ID
ORDER BY
M.create_time DESC
SELECT (@i :=@i + 1) 是为了生成自增的序列号字段
SELECT @i := 0 是为了将i进行初始化每次查询的序列号都会从1开始进行排序生成序列号
在mysql中执行的结果:
同样的sql是postgresql执行报错的,错误结果如下:
怎么办?
给答案:
给postgresql 可以执行的sql
SELECT
ROW_NUMBER() OVER (ORDER BY M.create_time DESC ) AS num,
M.id
FROM
tb_order M
GROUP BY
M.ID
ORDER BY
M.create_time DESC
在postgresql中执行的结果:
row_number() 函数
row_number()
函数返回当前行所在的分区内的序号,从 1 开始。
语法
row_number()
OVER (
[PARTITION BY partition_column_list]
[ORDER BY order_column_list]
)
partition_column_list
参与分区的列的列表。
order_column_list
参与排序的列的列表。
具体用法参考上面sql