返回行位置 - Postgres

Ant*_*Kim 5 sql postgresql

我返回一个带有位置的表:

select * 
from (
    select *, row_number() over() as position 
    from organization
) result 
where data1 = 'Hello';
Run Code Online (Sandbox Code Playgroud)

返回这个,这是正确的:

data1 | Hello
data2 | Joe
position | 5
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时:

select position 
from (
   select *, row_number() over() as position 
   from organization
) result 
where data1 = 'Hello';
Run Code Online (Sandbox Code Playgroud)

它返回:

position | 25
Run Code Online (Sandbox Code Playgroud)

这里缺少什么?如何修改此查询以返回 5?

Gur*_*ngh 7

RDBMS 中的表是一组无序的行。如果 中没有order by子句row_number,它将任意分配行号。

使用适当的order by子句以获得一致的结果:

select position 
from (
   select *,
        row_number() over(
           order by ??   -- add column(s) here
        ) as position 
   from organization
) result 
where data1 = 'Hello';
Run Code Online (Sandbox Code Playgroud)

  • @AntonKim:没有“表中的顺序”这样的东西。 (2认同)
  • @AntonKim:获得定义的排序顺序的**唯一**方式(_really_:唯一)是使用`order by`。没有替代。 (2认同)