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

时间:2019-04-26 07:26:16

标签: sql postgresql window-functions

我有一个包含2列的表格,名称和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

4 个答案:

答案 0 :(得分:1)

使用row_number()

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

答案 1 :(得分:0)

尝试row_number()

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

答案 2 :(得分:0)

使用row_number,可在Postgres上使用

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

您的代码@n := @n + 1是MySQL的变通方法,因为它在较早的版本上缺少窗口功能(例如row_number)。最新的MySQL现在具有窗口功能。您只需使用row_number,而无需解决方法。

而且您甚至不需要在Postgres中解决该问题。它具有开窗功能,远远早于其他所有人

答案 3 :(得分:0)

在我看来,您的代码实际上是MySQL,而不是Postgres代码。我确实在Postgres上运行时出错,但是Postgres通常不允许用户变量在常规SQL查询中使用。针对MySQL运行查询时,出现错误消息ROW_NUMBER列不存在。

但是,无论如何,Postgres长期以来一直支持SELECT Name, Student_ID, ROW_NUMBER() OVER (ORDER BY Student_ID) Serial FROM table1 ORDER BY Student_ID; 分析功能,因此,请改用它:

with