2016-03-04 74 views
0

我正在查看row_number()的文檔,但我不明白這是什麼用法。我有2個查詢,我試圖將結果加入到一個表中。在這種情況下,使用windows函數row_number()會很有用。我需要了解使用這個函數的用法。該文檔指出「分區內當前行的數量,從1開始計數」,但沒有示例。在PostgreSQL中使用Windows函數row_number()OVER()

回答

1

ROW_NUMBER() OVER ..不會幫你JOIN。要加入表格,可在FROM子句和ON參數中使用JOIN來指定要連接的兩個表格之間共享的字段。

至於ROW_NUMBER(),想象你有一個像

+-------+----------+ 
| color | animal | 
+-------+----------+ 
| red | panda | 
| red | squirrel | 
| black | elephant | 
| black | squirrel | 
| black | panther | 
| white | rabbit | 
| white | cat  | 
| white | dog  | 
+-------+----------+ 

表如果你寫道:

SELECT 
    color, animal, ROW_NUMBER() OVER (PARTITION BY color ORDER BY animal) as rownumber 
FROM myTable; 

你會得到:

+-------+----------+-----------+ 
| color | animal | rownumber | 
+-------+----------+-----------+ 
| red | panda |   1 | 
| red | squirrel |   2 | 
| black | elephant |   1 | 
| black | squirrel |   3 | 
| black | panther |   2 | 
| white | rabbit |   3 | 
| white | cat  |   1 | 
| white | dog  |   2 | 
+-------+----------+-----------+ 

是做什麼是 「分區」按顏色記錄。基本上通過顏色製作動物組。然後按動物名稱對每個組進行排序。然後,它在1

編號它們,它們的顏色分區的起始之內我不能想象會在join幫助,但也許你有一個古怪的場景,其中兩個表中都沒有場至場的關係,所以你必須對記錄進行排名並加入該排名?我希望不要因爲這會困難,粗略和昂貴。

+1

情景是在這裏:https://stackoverflow.com/questions/35782455/combining-2-select-queries – Patrick

+0

ack。謝謝@patrick。這非常符合法案。 – JNevill

+0

我之所以這麼說,是因爲我已經提供了一個解決方案,用於將一個查詢的結果與另一個查詢的結果結合起來。這些時間是從一個目的地到另一個目的地的時間。我基本上對這兩個查詢都使用同一張表。我在下面提供了一個小提琴: https://jsfiddle.net/ykhan8/pzj35eto/ 。我只是不明白爲什麼使用ROW_NUMBER()OVER()。 @JNevill。正如帕特里克提到我的方案的鏈接是解決方案提供給我的地方。會不會有一個簡單的方法來做到這一點 – bronxdeveloper