zoukankan      html  css  js  c++  java
  • Oracle中with as用法

    with as 相当于虚拟视图。

    例子:需求描述
    按照x列分组后统计y列的总值,最终目标是选出比y列总值的三分之一大的那些分组统计信息
     
    使用子查询方式实现最容易想到的方法
    SELECT x, SUM (y) AS total_y
         FROM t
       GROUP BY x
       HAVING SUM (y) > (SELECT SUM (y) FROM t) / 3
       ORDER BY total_y
     
     
     
    WITH Clause方法闪亮登场
    WITH secooler_sum AS (SELECT x, SUM (y) total_y
                              FROM t
                            GROUP BY x)
      SELECT x, total_y
        FROM secooler_sum
       WHERE total_y > (SELECT SUM (total_y) FROM secooler_sum) / 3
      ORDER BY total_y
     
    查询语句不是以select开始的,而是以“WITH”关键字开头
    可认为在真正进行查询之前预先构造了一个临时表secooler_sum,之后便可多次使用它做进一步的分析和处理
     
    WITH Clause方法的优点
    增加了SQL的易读性,如果构造了多个子查询,结构会更清晰;
    更重要的是:“一次分析,多次使用”,这也是为什么会提供性能的地方,达到了“少读”的目标
     
    知其所以然
    为什么WITH Clause方法会提高效率?通过查看上面两种方法的执行计划便可略知一二。
     
    第一种使用子查询的方法T表被扫描了两次,而使用WITH Clause方法,T表仅被扫描一次
    这也是为什么在大型数据仓库系统中推荐使用WITH Clause方法进行查询统计的原因,这样可以大大的提高数据分析和查询的效率
     
    另外,观察WITH Clause方法执行计划,其中“SYS_TEMP_XXXX”便是在运行过程中构造的中间统计结果临时表。
    美好生活
  • 相关阅读:
    elementui表单输入框部分校验--判断
    vue学习如何引入js,封装操作localStorage本地储存的方法
    vue组件传值 递增次数传递bug修复
    vue深度监听之手机格式344
    vue-------滑动验证
    vue get/post请求如何携带cookie的问题
    elementui的dialog组件踩坑
    WebStorm License Activation (WebStorm许可证激活)
    input 标签实现带提示文字的输入框
    隐藏 input 标签的边框
  • 原文地址:https://www.cnblogs.com/ssbydk/p/9142513.html
Copyright © 2011-2022 走看看