Java 使用jOOQ选择rownum/max(rownum)

Java 使用jOOQ选择rownum/max(rownum),java,sql,oracle,jooq,rownum,Java,Sql,Oracle,Jooq,Rownum,我正在查看一个SQL查询,它使用Oracle的rownumpseudocolumn选择行数作为总行数的一部分: ROWNUM/(MAX(ROWNUM) OVER()) 我正试图通过jOOQ编写的查询来完成同样的任务。可能吗?我不确定你的问题是否正确-你需要的是这个吗 SQL> select row_number() over(order by ename)/(count(*) over()) fraction from emp; FRACTION

我正在查看一个SQL查询,它使用Oracle的
rownum
pseudocolumn选择行数作为总行数的一部分:

ROWNUM/(MAX(ROWNUM) OVER())

我正试图通过jOOQ编写的查询来完成同样的任务。可能吗?

我不确定你的问题是否正确-你需要的是这个吗

SQL> select row_number() over(order by ename)/(count(*) over()) fraction from emp;

  FRACTION                                                                      
----------                                                                      
    .08333                                                                      
    .16667                                                                      
    .25000                                                                      
    .33333                                                                      
    .41667                                                                      
    .50000                                                                      
    .58333                                                                      
    .66667                                                                      
    .75000                                                                      
    .83333                                                                      
    .91667                                                                      
   1.00000   
此外,CUME_DIST分析函数也很有用:

SQL> SELECT ename, CUME_DIST()
  2     OVER (ORDER BY ename) fraction
  3     FROM emp
  4  /

ENAME        FRACTION                                                           
---------- ----------                                                           
ALLEN          .08333                                                           
BLAKE          .16667                                                           
CLARK          .25000                                                           
FORD           .33333                                                           
JAMES          .41667                                                           
JONES          .50000                                                           
KING           .58333                                                           
MARTIN         .66667                                                           
MILLER         .75000                                                           
SMITH          .83333                                                           
TURNER         .91667                                                          
WARD          1.00000      
虽然可能更适合实际查询,但以下是jOOQ中的
ROWNUM
解决方案:

// Qualified
DSL.rownum().div(DSL.max(DSL.rownum()).over());

// With static imports of DSL.*
rownum().div(max(rownum()).over());

另请参见:

谢谢-
CUME_DIST
正是我所需要的,jOOQ直接支持它。啊,这就解释了。我们较旧版本的jOOQ没有
rownum
。啊哈,在最近的一个版本中,它已被移动(复制)到
DSL
。以前,它是在。如果您缺少任何特定的功能,您可以始终求助于编写自己的“
MyDSL
”对象,该对象提供
字段