zoukankan      html  css  js  c++  java
  • group by having where order by

    1group by

    *在返回集字段中,这些字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。

    select 类别, sum(数量) as 数量之和
    from A
    group by 类别



    select 类别, sum(数量) AS 数量之和 from A group by 类别 order by sum(数量) desc


    select 类别, 摘要, sum(数量) AS 数量之和
    from A
    group by 类别, 摘要

    group by all

    首先我们不使用带ALL关键字的Group By语句:

    SELECTCOUNT(*)AS水果种类,ProductPlaceAS出产国
    FROMT_TEST_FRUITINFO
    WHERE(ProductPlace<>'Japan')
    GROUPBYProductPlace

    那么在最后结果中由于Japan不符合where语句,所以分组结果中将不会出现Japan

    现在我们加入ALL关键字:

    SELECTCOUNT(*)AS水果种类,ProductPlaceAS出产国
    FROMT_TEST_FRUITINFO
    WHERE(ProductPlace<>'Japan')
    GROUPBYALLProductPlace

    重新运行后,我们可以看到Japan的分组,但是对应的水果种类不会进行真正的统计,聚合函数会根据返回值的类型用默认值0或者NULL来代替聚合函数的返回值

     ROLLUP和CUBE 用法     
          Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句。如果是Group by  ROLLUP(A, B, C)的话,首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。

    
    

          如果是GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作。 grouping_id()可以美化效果。除了使用GROUPING函数,还可以使用GROUPING_ID来标识GROUP BY的结果。

    
           也可以 Group by Rollup(A,(B,C)) ,Group by A Rollup(B,C),…… 这样任意按自己想要的形式结合统计数据,非常方便


    2. Having

    
    

    where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。

    
    

    having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。

    
    

    having 子句被限制子已经在SELECT语句中定义的列和聚合表达式上。通常,你需要通过在HAVING子句中重复聚合函数表达式来引用聚合值,就如你在SELECT语句中做的那样。例如:

    
    

    SELECT A COUNT(B) FROM TABLE GROUP BY A HAVING COUNT(B)>2




    一个SQL语句往往会产生多个临时视图,那么这些关键字的执行顺序就非常重要了,因为你必须了解这个关键字是在对应视图形成前的字段进行操作还是对形成的临时视图进行操作,这个问题在使用了别名的视图尤其重要。
    以上列举的关键字是按照如下顺序进行执行的:Where, Group By, Having, Order by。首先where将最原始记录中不满足条件的记录删除(所以应该在where语句中尽量的将不符合条件的记录筛选掉,这样可以减少分组的次数
    然后通过Group By关键字后面指定的分组条件将筛选得到的视图进行分组,接着系统根据Having关键字后面指定的筛选条件,将分组视图后不满足条件的记录筛选掉,然后按照Order By语句对视图进行排序,这样最终的结果就产生了
    。在这四个关键字中,只有在Order By语句中才可以使用最终视图的列名







  • 相关阅读:
    20191317王鹏宇第四章学习笔记
    20191317王鹏宇2.3.1测试
    树莓派openeuler安装openssl及其实践
    树莓派实验指导第三章实验
    树莓派openeuler的安装以及ukui桌面的安装并安装远程桌面vnc
    20191317王鹏宇鲲鹏服务器测试
    反汇编测试
    信息安全系统设计与实现第八周:《Unix/Linux系统编程》第五章学习笔记
    团队作业三
    信息安全系统设计与实现第七周:《Unix/Linux系统编程》第四章学习笔记
  • 原文地址:https://www.cnblogs.com/yuanfuqiang/p/5625270.html
Copyright © 2011-2022 走看看