Teradata partition by col order by 0
Teradata partition by col order by 0
在研究我之前的一个问题时,我使用了 this post 的答案。我的查询如下所示:
sel
*
from (
sel distinct
COL,
FIELD
from TBL
where COL in (
-- subquery
)
and FIELD is not NULL
) q
qualify row_number() over (partition by COL order by 0) between 1 and 750
;
它做了我想让它做的事,但我不完全理解它。问题出在 partition by COL order by 0
位。我知道 partition by
根据指定字段中的值将数据分成子组,我知道 order by
后跟字段名称时将按该字段对每个分区的结果进行排序,但我不明白它是如何用整数运算的。我的假设是,在该位置放置任何常数都会产生相同的结果。这个假设是否正确? 0
这里有什么特殊的含义吗?
您的假设是正确的。你可以在其中添加任何值,你会得到相同的结果。
使用 ROW_NUMBER() 时,需要 window 函数的 OVER() 部分的 ORDER BY 子句。
在其中粘贴一个常量类似于说 "I don't care which records for COL you keep, just keep 750 of them"
正如@dnoeth 所指出的,因为您是按常量排序的,并且由于 Teradata 的并行特性以及它如何影响跨并行系统的数据检索(以及一般 RDBMS 的特性),所以不能保证您将在两次运行之间得到相同的结果。
在研究我之前的一个问题时,我使用了 this post 的答案。我的查询如下所示:
sel
*
from (
sel distinct
COL,
FIELD
from TBL
where COL in (
-- subquery
)
and FIELD is not NULL
) q
qualify row_number() over (partition by COL order by 0) between 1 and 750
;
它做了我想让它做的事,但我不完全理解它。问题出在 partition by COL order by 0
位。我知道 partition by
根据指定字段中的值将数据分成子组,我知道 order by
后跟字段名称时将按该字段对每个分区的结果进行排序,但我不明白它是如何用整数运算的。我的假设是,在该位置放置任何常数都会产生相同的结果。这个假设是否正确? 0
这里有什么特殊的含义吗?
您的假设是正确的。你可以在其中添加任何值,你会得到相同的结果。
使用 ROW_NUMBER() 时,需要 window 函数的 OVER() 部分的 ORDER BY 子句。
在其中粘贴一个常量类似于说 "I don't care which records for COL you keep, just keep 750 of them"
正如@dnoeth 所指出的,因为您是按常量排序的,并且由于 Teradata 的并行特性以及它如何影响跨并行系统的数据检索(以及一般 RDBMS 的特性),所以不能保证您将在两次运行之间得到相同的结果。