MySQL GROUP BY 语法总结

2017-11-04  本文已影响43人  tristax

近期主要在做公司网站的个人主页上用户相关数据的统计工作,需要频繁用到 MySQL 的 group by 的操作。顺便总结一下,温故而知新。

  1. 简述

    “GROUP BY” 从字面意义上理解就是根据 “BY” 指定的规则(例如:一个或者多个列)对数据进行分组,所谓分组就是将一个“数据集”划分成若干个“小区域”,然后根据若干个“小区域”进行数据处理。

    在分组的列上我们可以使用 COUNT, SUM, AVG 等聚合函数。

  2. 示例表

    • 创建表
    CREATE TABLE
    IF
    NOT EXISTS `test_group_by_syntax` (
    `id` INT UNSIGNED AUTO_INCREMENT,
    `type` VARCHAR ( 45 ) NOT NULL,
    `num` INT ( 11 ) NOT NULL,
    `remark` VARCHAR ( 100 ) NULL,
    PRIMARY KEY ( `id` ) 
    ) ENGINE = INNODB DEFAULT CHARSET = utf8;
    
    • 插入测试数据
    INSERT INTO test_group_by_syntax ( `type`, `num`, `remark` )
    VALUES
     ( 'a', 5, 'a2002' ),
     ( 'a', 2, 'a2001' ),
     ( 'b', 10, 'b2003' ),
     ( 'b', 6, 'b2002' ),
     ( 'b', 3, 'b2001' ),
     ( 'c', 9, 'c2004' ),
     ( 'c', 9, 'c2005' ),
     ( 'c', 8, 'c2003' ),
     ( 'c', 7, 'c2002' ),
     ( 'c', 4, 'c2001' ),
     ( 'a', 11, 'a2001' ),
     ( 'b', 6, 'b2002' );
    
  3. 常规用法

    • 示例1:统计每个类别数量总和

      SELECT type AS '类名', sum( num ) AS 总数 
      FROM
          test_group_by_syntax 
      GROUP BY
          type;
      
    • 示例2:统计每个分类并排序

      注意:GROUP BY 和 ORDER BY一起使用时,ORDER BY要在GROUP BY的后面

      SELECT type AS '类别', sum( num ) 
      FROM
          test_group_by_syntax 
      GROUP BY
          type 
      ORDER BY
          remark ASC;     
      
    • 示例3:多列分组统计

      SELECT type AS '类别', remark AS '摘要', sum( num ) 
      FROM
          test_group_by_syntax 
      GROUP BY
          type,
          remark;
      
  4. 高级用法(GROUP BY 与聚合函数)

    函数 作用
    sum(列名) 求和
    max(列名) 最大值
    min(列名) 最小值
    avg(列名) 平均值
    count(列名) 统计记录数 注意和count(*)的区别
    • 示例4:求各组平均值

      SELECT type AS '类别', avg( num ) 
      FROM
          test_group_by_syntax 
      GROUP BY
          type;
      
    • 示例5:求各组记录总数

      SELECT type AS '类别', count( * ) 
      FROM
          test_group_by_syntax 
      GROUP BY
          type;      
      
  5. 总结

    GROUP BY 语句根据一个或多个列对结果集进行分组。在分组统计方面用的比较多,有时候也会配合者 select distinct 去重。

参考来源

SQL中Group By的使用
MySQL GROUP BY 语句

上一篇下一篇

猜你喜欢

热点阅读