zoukankan      html  css  js  c++  java
  • GROUP BY, HAVING, COMPUTE, ORDER BY 语句

    GROUP BY用于对表或者视图的数据按字段分组:

    例如:

    求各专业的学生人数:

    USE Students
    SELECT 专业名, COUNT(*) AS '学生数'
    FROM XS
    GROUP BY 专业名

    产生一个结果集,包括每个专业的男生人数,女生人数,总人数及学生总人数

    USE Students
    SELECT 专业名, 性别, COUNT(*) AS '人数'
    FROM XS
    GROUP BY 专业名,性别
    WITH ROLLUP

    计算机    0    3
    计算机    1    8
    计算机    NULL    11
    通信工程    0    1
    通信工程    1    1
    通信工程    NULL    2
    NULL    NULL    13

    带有WITH ROLLUP将会生成一个汇总行。

    如果使用WITH CUBE:

    USE Students
    SELECT 专业名, 性别, COUNT(*) AS '人数'
    FROM XS
    GROUP BY 专业名,性别
    WITH CUBE
    

    结果如下:

    计算机    0    3
    通信工程    0    1
    NULL    0    4
    计算机    1    8
    通信工程    1    1
    NULL    1    9
    NULL    NULL    13
    计算机    NULL    11
    通信工程    NULL    2

    CUBE操作符对GROUP BY 子句中的各列的所有可能组合均产生汇总行。

    HAVING

    使用GROUP BY子句和聚合函数对数据进行分组后,还可以用HAVING子句对分组数据进行进一步的筛选。

    例如: 查找平均成绩大于85分的

    SELECT 学号, AVG(成绩) AS '平均成绩'
    FROM XS_KC
    GROUP BY 学号
    HAVING AVG(成绩)>=85

    当使用HAVING子句时,注意以下事项和原则:

    • HAVING子句只有与GROUP BY子句联用才能对分组进行约束。只使用HAVING子句而不使用GROUP BY子句是没有意义的。
    • 可以引用任何出现在选择列表中的列。
    • 不要与HAVING子句一起使用ALL关键字,因为HAVING子句会忽略ALL关键字而返回只满足自己条件的分组。

    COMPUTE

    COMPUTE子句用于分类汇总。COMPUTE将产生额外的汇总行

    USE Students
    SELECT 学号, 姓名, 出生时间
    FROM XS
    WHERE 专业名 = '通信工程'
    COMPUTE COUNT(学号)
    

    会在一个单独的窗口里面显示COMPUTE里面聚合函数的结果

    ORDER BY

    ORDER BY子句对查询结果进行排序

    系统默认的是ASC升序。要使用降序可以用DESC

    将计算机专业的学生按出生日期先后排序

    USE Students
    SELECT 学号, 姓名, 出生时间
    FROM XS
    WHERE 专业名 = '计算机'
    ORDER BY 出生时间
    

    当使用子句和运算符汇总数据时,注意下面的推荐操作:

    • 对经常聚合的列进行索引可以提高查询效率。例如,增加quantity列的索引能加快汇总操作的执行,甚至当使用了ROLLUP运算符时也是如此。
    • 在包含空值的列中避免使用聚合函数,因为结果集可能并没有正确地返回你要查询的数据。
      在结果集中使用ORDER BY子句以保证返回数据的排列顺序。如果不使用ORDER BY子句,SQL Server就不保证结果顺序。
    • 因为ROLLUP运算符比CUBE运算符更高效,所以只要可能就使用它。ROLLUP运算符之所以高效是因为它把汇总数据作为具体数据处理。CUBE运算符在执行时需要大量的运算,所以它需要更多的资源。
    • 使用COMPUTE或COMPUTE BY子句,是因为它们可以有助于查看和输出用于测试应用程序的结果集。但是,它们产生的额外汇总记录不符合关系型格式,所以它们不适合作为产品数据库的输出。
  • 相关阅读:
    Html 回顾
    Parallel 并行编程
    Task---常用的多线程(基于多线程线程)
    Threadpool 可以对线程加以管理的封装
    AsyncThreads---异步多线程
    Abstract 封装,继承,多态
    IO&&Serize 利用线程Thread.Sleep实现"自动输出"
    Ling && Lambda
    Delegate&&Event
    Delegate &&Lambda
  • 原文地址:https://www.cnblogs.com/herbert/p/1772875.html
Copyright © 2011-2022 走看看