2016-11-10 267 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

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

相关问题