2012-11-20 36 views
2

有一個PostgreSQL SQL SELECT結果。我需要將行分成五等分,並將特定值更新爲特定行。PostgreSQL - 將查詢結果劃分爲五元組

有沒有可能在SELECT中執行此需求而無需在應用程序中執行此操作?當我需要選擇數據到應用程序並執行PostgreSQL服務器的排名時,我想避免出現這種情況。

數據例如 - 第一列是值,第二列是quintil

4859 - 5 
4569 - 5 
4125 - 4 
3986 - 4 
3852 - 3 
3562 - 3 
3452 - 2 
3269 - 2 
3168 - 1 
3058 - 1

謝謝。

回答

6

有一個叫做「ntile」的窗口函數來產生這個效果:給它一個參數,指定它覆蓋的輸出應該被分成多少個「瓦片」(在這種情況下是5)。

例如:

select t.id, ntile(5) over (order by t.id) 
from t 

對於所提供的標準的人的列表,請參閱window function tutorial的介紹,窗函數,並window functions

+0

我們如何在沒有窗口功能的情況下完成任何事情?我發現自己很頻繁地使用它們,在過去我可能會使用客戶端處理,令人費解的hacky SQL,PL/PgSQL等等。它們讓事情變得更容易。 –

+0

@CraigRinger:在9.3出來之後,也許我們會說同樣的「橫向」? (我知道我以前希望它) – araqnid

+0

哦,我們會的。我不得不通過嵌套查詢來使用Pg的SRF-in-SELECT語法,在LATERAL很好地完成這項工作的情況下,幾次查詢都非常可怕。 –