我正在查看一个 SQL 查询,该查询使用 Oracle 的rownum
伪列来选择行号作为总行数的一部分:
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
虽然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()