Sql 按列顺序按0划分Teradata分区

Sql 按列顺序按0划分Teradata分区,sql,sql-order-by,teradata,Sql,Sql Order By,Teradata,在研究我以前的一个问题时,我使用了答案。我的查询如下所示: 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

在研究我以前的一个问题时,我使用了答案。我的查询如下所示:

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
;

它做了我想让它做的,但我不完全理解它。问题在于
按列按0的顺序分区。我知道,
partition by
根据指定字段中的值将数据分成子组,并且我知道,
order by
后面跟一个字段名时,将按该字段对每个分区的结果进行排序,但我不明白它是如何使用整数的。我的假设是,把任何常数放在这个点上都会得到相同的结果。这个假设正确吗?
0
在这里有什么特殊意义吗?

你的假设是正确的。你可以把任何值放在那里,你会得到同样的结果

使用ROW_NUMBER()时,需要窗口函数OVER()部分的ORDER BY子句

在其中加入一个常数类似于说“我不在乎你保留哪些记录,只保留其中的750个”


正如@dnoeth所指出的,由于您是按常量排序的,并且由于Teradata的并行性质以及它如何影响跨并行系统的数据检索(以及RDBMS的一般性质),因此无法保证在两次运行之间会得到相同的结果

它只是一个伪值,用于按检索记录的自然顺序对记录进行排序,并相应地分配行号值。您不了解按常量排序的结果,或者不了解实现中实际发生的情况,例如,这些关系是如何被打破的?我不理解按常数排序的结果,我也不确定你指的是哪一个关系。你的假设是正确的,OP。你可以在其中加入任何值,你会得到相同的结果。使用ROW_NUMBER()时,需要窗口函数OVER()部分的ORDER BY子句。坚持一个常数就像是说“我不在乎你保留哪些记录,只要保留750张就行了”太棒了。你介意把它再贴一次作为答案,这样我就可以接受了吗?