select 查询语句中的自动递增字段

auto increment field in select query statement

我有一个包含 2 列的 table,name 和 id 具有以下值

姓名Student_ID 插孔 231
戴夫 425
麦克 001
百合 128
利亚姆 358

我想在此结果中添加一个具有自动递增序列值的新列。

我试过使用以下查询。但是我收到如下所述的错误

查询:

    SELECT @n := @n +1 n,
           name, 
           id
      FROM table1, (SELECT @n := 0) m
     ORDER BY id

    Error: 
    ERROR:  syntax error at or near ":="
    LINE 2: SELECT @n := @n +1 n,

预期结果:

    Name  Student_ID  Serial
     jack      231      1    
     dave      425      2
     mike      001      3  
     lily      128      4 
     liam      358      5

试试 row_number()

SELECT row_number()over(order by id) n,
           name, 
           id
      FROM table1 
     ORDER BY id

使用 row_number,它适用于 Postgres

select *, row_number() over(order by id) as serial from table1

您的代码 @n := @n + 1 是 MySQL 的解决方法,因为它在旧版本上缺少窗口函数(例如,row_number)。最新的 MySQL 现在具有窗口功能。您可以只使用 row_number,不需要解决方法。

而且您甚至不需要在 Postgres 中使用该变通方法。它比其他人早很久就有窗口功能

使用row_number()

select name, student_id, row_number() over(order by student_id) as serial
from tablename

您的代码在我看来实际上是 MySQL,而不是 Postgres 代码。我在 Postgres 上收到了你的错误 运行,但 Postgres 通常不允许在常规 SQL 查询中使用用户变量。当 运行 你对 MySQL 的查询时,我得到一个错误,指出 id 列不存在。

但是,无论如何,Postgres 已经支持 ROW_NUMBER 分析功能很长时间了,所以请改用它:

SELECT
    Name,
    Student_ID,
    ROW_NUMBER() OVER (ORDER BY Student_ID) Serial
FROM table1
ORDER BY
    Student_ID;