NTILE的动态参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NTILE的动态参数相关的知识,希望对你有一定的参考价值。

我的桌子行数在25k到250k之间。现在我需要将整个表格分成块,以便使用NTILE进行处理。如果我将固定计数作为NTILE(4),它对我来说很好。我们有没有办法动态传递参数?

我想将个别批量维持到25k。所以如果表有40k行参数值应该是2,如果是150k,那应该是6等等......

请建议如何实现这一目标。

答案

从您的描述中不清楚为什么要动态传递参数,而不是将其作为静态表达式,也许是类似的

编辑:最初我在NTILE()的参数中直接在子查询中计数,但这不起作用 - Oracle实现不支持。

这应该工作 - 在SCOTT模式的EMP表上测试:

select empno, ename,
       ntile ( ceil(ct/4) ) over (partition by ct order by empno) as n_tile
from emp cross join ( select count(*) as ct from emp );

     EMPNO ENAME          N_TILE
---------- ---------- ----------
      7369 SMITH               1
      7499 ALLEN               1
      7521 WARD                1
      7566 JONES               1
      7654 MARTIN              2
      7698 BLAKE               2
      7782 CLARK               2
      7788 SCOTT               2
      7839 KING                3
      7844 TURNER              3
      7876 ADAMS               3
      7900 JAMES               4
      7902 FORD                4
      7934 MILLER              4

 14 rows selected 

因此,基表中的行数需要单独完成,然后使用交叉连接(这很好,因为其中一个表只有一行)。

所以:

  select .....  ,  ntile ( ceil(ct/25000) ) over (partition by ct order by ..... ) 
  ....
  from <base_table> CROSS JOIN (select count(*) as ct from <base_table>)
另一答案

您可以为NTILE(x)声明2个变量x,为表中的行数声明y。首先将y指定为表的count(*),然后使用if函数根据y指定x。

以上是关于NTILE的动态参数的主要内容,如果未能解决你的问题,请参考以下文章

在android中动态创建选项卡并使用传入的参数加载片段

关于 pyspark windows 函数中的 ntile 函数

动态 Rstudio 代码片段

想了解更多关于 NTILE()

是否可以动态编译和执行 C# 代码片段?

Hive 中的 NTILE 函数性能