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 输出排序顺序
  • 相关阅读:
    当我有一台服务器时我做了什么
    git 安装及基本配置
    关于大厂面试中问到的二十几个 HTTP 面试题
    日问周刊 | 全栈面试汇总 | 第七期
    dockerfile 最佳实践及示例
    面试官:如果 http 响应头中 ETag 值改变了,是否意味着文件内容一定已经更改
    Nginx 反向代理时获取用户的真实 IP
    Go 语言实现 HTTP 层面的反向代理
    Go 语言中的 Http 路由基础
    Json Schema
  • 原文地址:https://www.cnblogs.com/jp-mao/p/6569359.html
Copyright © 2011-2022 走看看