2016-11-10 201 views
0

我經常在Teradata的SQL助手使用:Teradata的ROW_NUMBER()OVER(由X分區,Y順序由Z DESC)= 1

row_number() over(partition by X||Y order by Z desc) = 1 

我的同事使用相同的,但與他不」的區別t輸入「||」在兩個屬性之間,他只是輸入一個「,」。我用兩個測試了一些小數據,並且在輸出中找不到任何差異。

我的假設是使用「||」是兩種屬性(X和Y)的串聯。這是真的還是不?

有人現在有什麼區別是「||」和「,」在這個命令?

非常感謝提前..

+0

'x || y'基於** single **(連接)值創建組。 'x,y'基於*兩個*值的組合創建組 –

+2

除了Gordon的回答:使用逗號的版本更加高效,因爲它避免了昂貴的類型轉換和連接。 – dnoeth

+0

除了Gordon的答案,當使用串聯時,如果任何一個值爲null,那麼它將評估好像兩者都爲null,因爲用null連接任何字符串將導致null。 –

回答

4

這兩者非常相似。但是,帶有逗號的版本是正確(對於大多數用途而言)。考慮在這些情況下會發生什麼:

X Y 
A BC 
AB C 

串聯版本將它們組合成「ABC」,但您可能不想這樣做。逗號版本將這些值視爲('A','BC')和('AB','C'),因此它們是分開的 - 就像您做過group by X, Y一樣。

只有將這些值連接在一起,如果這真的是你的意圖。

+0

謝謝戈登!非常容易理解的例子! :-) –

相關問題