zoukankan      html  css  js  c++  java
  • Day-9:分组数据

    1、数据分组

      分组可以把数据分为多个逻辑组,对每个组进行聚集计算。

    2、创建分组

      分组是使用select语句的group by子句建立的。

    select vend_id, count(*) as num_prods
    from products
    group by vend_id;
    
    /*
    vend_id  num_prods
    BRS01    3
    DLL01    4
    FNG01    2
    */

    分析:

      select语句指定了两个列:vend_id包含产品供应商的ID,num_prods为计算字段。

      group by子句指示DBMS按vend_id排序并分组数据,会对每个vend_id而不是整个

      表计算num_prods一次。从输出看出,供应商BRS01有3个产品,供应商DLL01有4

      个商品,FNG01有2个产品。

    使用group by重要规定:

      group by子句可以包含任命数目的列,可以对分组进行嵌套。

      如果在group by子句中嵌套了分组,数据将在最后指定的分组上进行汇总。(指定的所有列一起计算,所以不能从个别的列取回数据)

      group by子句中列出的每一列都必须是检索列或有效表达式,且不能是聚集函数。如果在select中使用表达式,则必须在group by子句中指定相同的表达式,不能用别名。

      除聚集计算语句外,select语句中的每一列都必须在group by 子句中给出。

      如果分组中有NULL值的行,则作为一个分组返回,如果列中有多行NULL值,它将分为一组.

      group by子句必须出现在where子句之后,order by之前。

    3、过滤分组

      having子句(支持所有where操作符)

    select cust_id, count(*) as orders
    from orders
    group by cust_id
    having count(*) >= 2;
    
    /*
    cust_id      orders
    1000000001    2
    */

    说明:having与wher的区别

      where在分组前进行过滤,having在分组后进行过滤,使用having时应结合group by一起。

    select vend_id, count(*) as num_prods
    from products
    where prod_price >= 4
    group by vend_id
    having count(*) >= 2;
    
    /*
    vend_id  num_prods
    BRS01    3
    FNG01    2
    */

    4、分组(group by)与排序(order by)

    order by对输出排序

    group by:对行分组,但输出可能不是分组的排序

    5、select子句顺序

    select子句及其顺序
    子句 说明 是否必须使用
    select 要返回的列或表达式
    from 检索数据的表 仅在从表中检索数据时使用
    where 行级过滤
    group by 分组说明 仅在按组计算聚集时使用
    having 组级过滤
    order by 输出排序顺序
  • 相关阅读:
    可能会搞砸你的面试:你知道一个TCP连接上能发起多少个HTTP请求吗?
    iOS笔记055
    iOS笔记053- Quartz2D-练习
    iOS笔记052- Quartz2D-绘图
    IOS笔记051-手势使用
    IOS笔记050-事件处理
    IOS笔记049-UITabBarController
    IOS笔记048-数据存储
    IOS笔记047-代理传值和block传值
    IOS笔记046-UIApplication/导航控制器
  • 原文地址:https://www.cnblogs.com/jp-mao/p/6569359.html
Copyright © 2011-2022 走看看