zoukankan      html  css  js  c++  java
  • WITH分析函数 老猫

      create table test_1
      (
           x number(10),
           y number(10)
      );
     
      insert into test_1 values (1,110);
      insert into test_1 values (2,120);
      insert into test_1 values (2,80);
      insert into test_1 values (3,150);
      insert into test_1 values (3,30);
      insert into test_1 values (3,60);
      commit;
     
      select * from test_1;

             X          Y
    ---------- ----------
             1        110
             2        120
             2         80
             3        150
             3         30
             3         60

    6 rows selected.


    需求描述
    按照x列分组后统计y列的总值,是选出比y列总值的三分之一大的那些分组统计信息。


    1、使用子查询方式实现

      SELECT x, SUM(y) AS total_y
        FROM test_1
       GROUP BY x
      HAVING SUM(y) > (SELECT SUM(y) / 3 FROM test_1)
       ORDER BY total_y;

             X    TOTAL_Y
    ---------- ----------
             2        200
             3        240

    2、WITH Clause方法闪亮登场

       WITH secooler_sum AS (SELECT x, SUM (y) total_y
                                FROM test_1
                             GROUP BY x)
        SELECT x, total_y
         FROM secooler_sum
       WHERE total_y > (SELECT SUM (total_y) / 3 FROM secooler_sum)
       ORDER BY total_y;


             X    TOTAL_Y
    ---------- ----------
             2        200
             3        240
            
    这里的查询语句不是以select开始的,而是以"WITH"关键字开头。
    可以认为Oracle在真正进行查询之前预先构造了一个临时表secooler_sum,
    之后我们便可多次使用它做进一步的分析和处理。


    WITH Clause方法的优点
    总结:
    1、增加了SQL的易读性,如果构造了多个子查询,结构会更清晰;
    2、"一次分析,多次使用",提供性能,达到了"少读"的目标。

  • 相关阅读:
    Angular相关UI框架的安装
    Visual Studio Code 编辑器常用插件
    Groovy特性
    Notification(Android)消息推送机制
    Sublime SVN插件使用方法 PS:翻出来的旧笔记,现在Sublime和svn用的都不多了
    Python基本语法练习笔记(一)
    首篇博文占坑
    apache2修改用户和组
    如何修改script.bin/script.fex
    perl的INC设置
  • 原文地址:https://www.cnblogs.com/oldcat/p/2167975.html
Copyright © 2011-2022 走看看