count(*) OVER (PARTITION BY a, b ORDER BY a, b, c) * 10
這產生與以下相同的結果:
dense_rank() OVER (PARTITION BY a, b ORDER BY a, b, c) * 10
在這樣的查詢中使用:
SELECT
dense_rank() OVER (ORDER BY a, b) ,
a || b,
count(*) OVER (
PARTITION BY a, b
ORDER BY a, b, c
) * 10 ,
a2,
b1,
c1,
cc1,
c2,
FROM
join ....
ORDER BY 1, 6;
我對我的查詢結果很滿意。
但是我應該欣賞一種方法而不是另一種方法嗎?為什么?
uj5u.com熱心網友回復:
之后PARTITION BY a, b沒有任何添加a或添加b的意義ORDER BY,就像大衛評論的那樣。
所以我們簡化為:
count(*) OVER (PARTITION BY a, b ORDER BY c) * 10
dense_rank() OVER (PARTITION BY a, b ORDER BY c) * 10
這兩個恰好是等價c的UNIQUE。否則他們不是。
您需要準確定義數字應該表示的內容、表定義以及確切的查詢,因為連接可能會引入重復值和 NULL 值。
row_numer()或者rank()是類似的視窗函式...
它們的性能幾乎相同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/439762.html
標籤:sql PostgreSQL 窗函数
上一篇:如何通過連接多個表進行更新?
下一篇:查詢電話記錄
