美文网首页
汇总和分组数据

汇总和分组数据

作者: olivia_ong | 来源:发表于2016-11-16 20:20 被阅读0次

    汇总数据

    利用聚集函数(aggregate function)对表中信息进行汇总。

    聚集函数

    • 运行在行组上,计算和返回单个值的函数。
    • SQL聚集函数:
    • AVG():返回某列的平均值
    • COUNT():返回某列的行数
    • MAX():返回某列的最大值
    • MIN():返回某列的最小值
    • SUM():返回某列之和
    • 具体应用
      avg()函数计算列的平均值,如果是多个列,必须使用多个avg()函数;avg()函数忽略列值为NULL的行。
      select avg(prod_price) as avg_price from products;
      count()函数进行计数。
      select count(*) as num_cast from customers;//对表中所有行计数,不管各列有什么值
      select count(cust_email) as num_cast from customers;//对特定列中具有值的行进行计数,忽略NULL值
      max()函数和min()函数分别返回特性列的最大值和最小值,要求制定列名,忽略NULL值。
      select max(prod_price) as max_price from products;
      sum()函数返回指定列的和
    select sum(quantity*item_price) as items_ordered 
    from orderitems
     where order_num=20005;
    

    利用算术操作符,所有的聚集函数都可以用来执行多个列上的计算。

    • 聚集不同的值
      对所有的行执行计算,指定ALL或者不给参数(ALL是默认行为);
      只包含不同的值,指定DISTINCT参数
      select avg(distinct prod_price) as avg_price from products;

    分组数据

    利用group by子句和having子句对不同类别的数据进行分组汇总。

    创建分组

    利用group by子句创建分组

    select vend_id,count(*) as num_prods
    from products
    group by vend_id;//不同vend_id包含的产品数目
    

    使用group by子句的规定:

    • group by子句可以包含任意数目的列。
    • 如果在group by子句中嵌套了分组,数据将在最后规定的分组上进行汇总。
    • group by子句中列出的每个列都必须是检索列或者有效的表达式,不能是聚集函数。
    • 处聚集计算语句外,select语句中的每个列都必须在group by子句中给出。
    • 如果分组中具有NULL值,则NULL值将作为一个分组返回。
    • group by子句必须出现在where子句之后,order by子句之前。
    • 加上with rollup,会将所有的分组数返回
    select vend_id,count(*) as num_prods
    from products
    group by vend_id with rollup;
    

    过滤分组

    利用having子句替代where对分组进行过滤。

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

    where与having相结合

    select vend_id,count(*) as num_prods
    from products
    where prod_price>=10
    group by vend_id having count(*)>=2;//具有两个及以上的价格为10及以上产品的供应商
    

    相关文章

      网友评论

          本文标题:汇总和分组数据

          本文链接:https://www.haomeiwen.com/subject/tfirpttx.html