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