2017-03-27 55 views
0

我返回一个表的位置:返回行位置 - Postgres的

select * 
from (
    select *, row_number() over() as position 
    from organization 
) result 
where data1 = 'Hello'; 

还给这一点,这是正确的:

data1 | Hello 
data2 | Joe 
position | 5 

但是当我做:

select position 
from (
    select *, row_number() over() as position 
    from organization 
) result 
where data1 = 'Hello'; 

它退货:

position | 25 

这里错过了什么? 如何修改此查询以返回5?

+1

您应该包括一个'ORDER BY'子句中的窗函数中的排序。没有它,结果是任意的。 –

回答

1

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

使用正确的order by子句,以获得一致的结果:

select position 
from (
    select *, 
     row_number() over(
      order by ?? -- add column(s) here 
     ) as position 
    from organization 
) result 
where data1 = 'Hello'; 
+0

谢谢,我希望现在的排序与表“组织”中的排序相同,原因是其他应用程序列表从上到下逐条记录,就像现在一样。我可以在这种情况下使用哪个“order by”? –

+2

@AntonKim:没有“表中的订单”这样的东西。 –

+0

@AntonKim - RDBMS中的表是无序的一组行。有没有这样的事情,表格顺序。您需要定义您想要订购的列。 – GurV