暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL 趣味题——计算 10 的阶乘

SQL干货分享 2021-08-13
4231

(CSDN博主:写代码也要符合基本法)
各位看官老爷大家早上好,今天是周五,我们轻轻松松看个趣味题目:用 SQL 计算 10 的阶乘
解法一:利用 DBMS_AW.EVAL_NUMBER
    SQL> WITH equation AS
    2 (SELECT listagg(LEVEL, '*') within GROUP(ORDER BY LEVEL) e
    3 FROM dual
    4 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) AS
        2 (SELECT 1 n, 1 f
        3 FROM dual
        4 UNION ALL
        5 SELECT n + 1, f * (n + 1)
        6 FROM factorial
        7 WHERE n < 10)
        8 SELECT f FROM factorial WHERE n = 10;


        F
        ----------
        3628800

        解法四:MODEL 迭代器

          SQL> WITH factorial AS
          2 (SELECT n, f
          3 FROM (SELECT LEVEL n FROM dual CONNECT BY LEVEL <= 10)
          4 MODEL RETURN UPDATED ROWS
          5 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论