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

Sql select查询语句中的自动递增字段,sql,postgresql,window-functions,Sql,Postgresql,Window Functions,我有一个包含两列的表,name和id包含以下值 姓名学生ID 杰克231 戴夫425 麦克001 莉莉128 利亚姆358 我想用自动递增的序列值向这个结果添加一个新列 我已尝试使用以下查询。但我得到一个如下所述的错误 查询: SELECT @n := @n +1 n, name, id FROM table1, (SELECT @n := 0) m ORDER BY id Error: ERROR:

我有一个包含两列的表,name和id包含以下值

姓名学生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
尝试使用
行编号()


使用
行号
,它对Postgres有效

select *, row_number() over(order by id) as serial from table1
您的代码
@n:=@n+1
是MySQL的工作方法,因为它在旧版本上缺少窗口功能(例如,
row\u number
)。最新的MySQL现在具有窗口功能。您只需使用
行号
,无需进行变通

你甚至不需要在博士后工作。早在几乎所有人使用
行数()之前,它就具有窗口功能了


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

但是,在任何情况下,Postgres长期以来一直支持
行数
分析功能,因此只需使用该功能即可:

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

你真的在用Postgres吗?或者,你在使用MySQL吗?@TimBiegeleisen它是Postgres,否则如果它是MySQL就不会是语法错误。也许他以前用过MySQLlife@MichaelBuen实际上,这在MySQL上也是一个错误,因为OP描述的表没有
id
列。@TimBiegeleisen-Hmm。。不应该是“找不到id字段”吗?不是语法错误?那是语法错误:-)
select name, student_id, row_number() over(order by student_id) as serial
from tablename
SELECT
    Name,
    Student_ID,
    ROW_NUMBER() OVER (ORDER BY Student_ID) Serial
FROM table1
ORDER BY
    Student_ID;