1

我正在查看一个 SQL 查询,该查询使用 Oracle 的rownum伪列来选择行号作为总行数的一部分:

ROWNUM/(MAX(ROWNUM) OVER())

我正在尝试通过 jOOQ 编写的查询来完成同样的事情。那可能吗?

4

2 回答 2

2

我不确定您的问题是否正确-您需要吗?

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      
于 2014-03-06T20:47:48.613 回答
1

虽然Dmitry 的CUME_DIST()解决方案可能更适合实际查询,ROWNUM但这是 jOOQ 中的解决方案,作为记录:

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

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

也可以看看:DSL.rownum()

于 2014-03-07T08:34:09.367 回答