

SQL> WITH equation AS2 (SELECT listagg(LEVEL, '*') within GROUP(ORDER BY LEVEL) e3 FROM dual4 CONNECT BY LEVEL <= 10)5 SELECT e, dbms_aw.eval_number(e) f FROM equation;E F---------------------- ----------1*2*3*4*5*6*7*8*9*10 3628800
解法二:利用对数运算规则:积的对数等于对数的和

SQL> SELECT power(10, SUM(log(10, LEVEL))) f FROM dual CONNECT BY LEVEL <= 10;F----------3628800
解法三:递归子查询
SQL> WITH factorial(n, f) AS2 (SELECT 1 n, 1 f3 FROM dual4 UNION ALL5 SELECT n + 1, f * (n + 1)6 FROM factorial7 WHERE n < 10)8 SELECT f FROM factorial WHERE n = 10;F----------3628800
解法四:MODEL 迭代器
SQL> WITH factorial AS2 (SELECT n, f3 FROM (SELECT LEVEL n FROM dual CONNECT BY LEVEL <= 10)4 MODEL RETURN UPDATED ROWS5 DIMENSION BY(n) MEASURES(0 f)6 RULES ITERATE(10)7 (f[n] ORDER BY n = presentv(f[cv(n) - 1], f[cv(n) - 1], 1) * cv(n)))8 SELECT f FROM factorial WHERE n = 10;F----------3628800
小刘能想出来的办法就这么多啦,各位看官老爷藏龙卧虎,想必还有更多妙法,还望不吝赐教


文章转载自SQL干货分享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




