• COMPUTE 和 COMPUTE BY


    GROUP BY子句返回的结果集中只有合计数据,而没有原始的详细记录。COMPTE生成合计作为附加的汇总列出现在结果集的最后。当与BY一起使用时,COMPUTE 子句在结果集内生成控制中断和分类汇总。

    compute by 的规则:

    (1)不能将distinct与行统计函数一起使用

    (2)compute   by 中列出的列必须出现在选择列表中

    (3)不能在含有compute by 子句的语句中使用select into 子句,因为包括compute 子句的语句会产生不规则的行。

    (4)compute 用了 by子句,则必须使用order by , 且compute by中的列必须是order by列表的全部,或者前边的连续几个。

    (5)compute 省略了 by ,则order by 也可以省略。

    (6)compute by 子句包含多列时,会将一个组(第一个列分的组)分成若干个子组(利用后面的列),并对每层子组进行统计。

    (7)compute by 子句中可以使用多个统计函数,他们互不影响。

    (8)compute 不包含by 时不对前面信息分组,而只对全部信息进行统计。

    (9)COMPUTE 所生成的汇总值在查询结果中显示为单独的结果集。

    COMPUTE 生成的结果集

    当 COMPUTE 带 BY 子句时,符合 SELECT 条件的每个组都有两个结果集:

    • 每个组的第一个结果集是明细行集,其中包含该组的选择列表信息。
    • 每个组的第二个结果集有一行,其中包含该组的 COMPUTE 子句中所指定的聚合函数的小计。

    当 COMPUTE 不带 BY 子句时,SELECT 语句有两个结果集:

    • 每个组的第一个结果集是包含选择列表信息的所有明细行。
    • 第二个结果集有一行,其中包含 COMPUTE 子句中所指定的聚合函数的合计。
    • COMPUTE 和 GROUP BY比较

      COMPUTE 和 GROUP BY 区别:

      • GROUP BY 生成单个结果集。每个组都有一个只包含分组依据列和显示该组子聚合的聚合函数的行。选择列表只能包含分组依据列和聚合函数。
      • COMPUTE 生成多个结果集。一种结果集包含每个组的明细行,其中包含选择列表中的表达式。另一种结果集包含组的子聚合,或 SELECT 语句的总聚合。选择列表可包含除分组依据列或聚合函数之外的其他表达式。聚合函数在 COMPUTE 子句中指定,而不是在选择列表中指定。

    举例

    创建表如下:

    CREATE TABLE PERSON
    (部门 char(10),员工 char(6),工资 int,年龄 int)

    INSERT INTO PERSON SELECT 'A','ZHANG',100,20
    INSERT INTO PERSON SELECT 'A','LI',200,21
    INSERT INTO PERSON SELECT 'A','WANG',300,22
    INSERT INTO PERSON SELECT 'A','ZHAO',400,23
    INSERT INTO PERSON SELECT 'B','DUAN',500,24
    INSERT INTO PERSON SELECT 'B','DUAN',600,25

    部门 员工 工资 年龄

    A             ZHANG     100    20
    A             LI        200    21
    A             WANG      300    22
    A             ZHAO      400    23
    B             DUAN      500    24
    B             DUAN      600    25

    (1)GROUP BY

    SELECT 部门,员工,SUM(工资)AS TOTAL,avg(年龄)as年龄
    FROM PERSON
    GROUP BY 部门,员工

    结果:

    部门 员工 工资 年龄

    B             DUAN      1100    24
    A             LI        200    21
    A             WANG      300    22
    A             ZHANG     100    20
    A             ZHAO      400    23

    (2) COMPUTE

    SELECT 部门,员工,工资,年龄
    FROM PERSON
    ORDER BY 部门,员工
    COMPUTE  SUM(工资) ,avg(年龄)

    结果:

    部门 员工 工资 年龄

    A             LI        200    21
    A             WANG      300    22
    A             ZHANG     100    20
    A             ZHAO      400    23
    B             DUAN      500    24
    B             DUAN      600    25

    sum avg

    2100    22

    (3)COMPUTE  BY

    SELECT 部门,员工,工资,年龄
    FROM PERSON
    ORDER BY 部门,员工
    COMPUTE  SUM(工资) ,avg(年龄) by 部门

    结果

    部门 员工 工资 年龄

    A             LI        200    21
    A             WANG      300    22
    A             ZHANG     100    20
    A             ZHAO      400    23

    sum avg

    1000    21

    部门 员工 工资 年龄

    B             DUAN      500    24
    B             DUAN      600    25

    sum avg

    1100    24

  • 相关阅读:
    python之道04
    python之list [ 列表 ]
    end和sep的使用方法
    pass1
    python之for (循环)
    python之range (范围)
    python之str (字符型)
    python之bool (布尔值)
    python之int (整型)
    python之道03
  • 原文地址:https://www.cnblogs.com/dyufei/p/2573972.html
Copyright © 2020-2023  润新知