我有一个包含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
答案 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