2017-03-27 86 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