Rad*_*mko 27 postgresql row-number
当某些列按结果排序时,如何在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
有没有其他方法如何返回有序和编号的结果,而无需复制代码?
我知道这可以通过在应用程序本身中增加一些变量来解决,但我想在数据库层执行此操作并返回已编号的应用程序结果...
小智 37
不 - order by在窗口函数order by中,select语句的子句在功能上是两个不同的东西.
此外,您的声明产生:ERROR:  window function call requires an OVER clause,所以:
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
另请注意,如果使用不同的偏移量多次运行此查询,则需要:
或者你可能会得到重复和丢失的行.有关原因,请参阅此答案的评论.
| 归档时间: | 
 | 
| 查看次数: | 57315 次 | 
| 最近记录: |