PostgreSQL中的行编号
发布时间:2020-12-13 16:43:48 所属栏目:百科 来源:网络整理
导读:当结果由某些列排序时,如何获取PostgreSQL中的行号? 例如 SELECT 30+row_number() AS position,* FROM users ORDER BY salary DESC LIMIT 30 OFFSET 30 我认为查询将返回如下列表: position | name | salary31 | Joy | 450032 | Katie| 400033 | Frank| 3
当结果由某些列排序时,如何获取PostgreSQL中的行号?
例如 SELECT 30+row_number() AS position,* FROM users ORDER BY salary DESC LIMIT 30 OFFSET 30 我认为查询将返回如下列表: position | name | salary 31 | Joy | 4500 32 | Katie| 4000 33 | Frank| 3500 实际上,我必须复制ORDER子句到查询,使其功能: SELECT 30+row_number(ORDER BY salary DESC) AS position,* FROM users ORDER BY salary DESC LIMIT 30 OFFSET 30 有没有其他方法如何返回有序和编号的结果,而不必重复的代码? 我知道这可以通过增加一些变量在应用程序本身来解决,但我想在数据库层,并返回到应用程序已编号的结果…
no – 在窗口函数中的顺序和select语句的order by子句在功能上是两个不同的东西。
此外,您的语句生成:ERROR:window函数调用需要一个OVER子句,因此: SELECT 30+row_number(ORDER BY salary DESC) AS position,* FROM users ORDER BY salary DESC LIMIT 30 OFFSET 30 应该: SELECT 30+row_number() OVER(ORDER BY salary DESC) AS position,* FROM users ORDER BY salary DESC LIMIT 30 OFFSET 30 注意,如果工资不是唯一的,那么不能保证他们甚至会生产相同的订单。也许最好做: SELECT * FROM ( SELECT 30+row_number() OVER(ORDER BY salary DESC) AS position,* FROM users ) ORDER BY position LIMIT 30 OFFSET 30 另请注意,如果您使用不同的偏移量多次运行此查询,则需要: >将您的isolation level设置为可序列化 或者您可能会得到重复和丢失的行。参见this answer的意见为什么。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |