Sql select查询语句中的自动递增字段
我有一个包含两列的表,name和id包含以下值 姓名学生ID 杰克231Sql 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:
戴夫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;