我正在查看使用Oracle的rownum
伪列来选择行号作为总行数的一小部分的SQL查询:
ROWNUM/(MAX(ROWNUM) OVER())
我正在尝试通过jOOQ编写的查询来完成同样的事情。这可能吗?
答案 0 :(得分: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
答案 1 :(得分:1)
虽然Dmitry's CUME_DIST()
solution可能更适合实际查询,但这里是jOOQ中的ROWNUM
解决方案,用于记录:
// Qualified
DSL.rownum().div(DSL.max(DSL.rownum()).over());
// With static imports of DSL.*
rownum().div(max(rownum()).over());
另请参阅:DSL.rownum()