首页 > 数据库 > MySQL > 正文

MySql中怎样用group by

2024-07-24 12:33:41
字体:
来源:转载
供稿:网友
  日常开发中,我们经常会使用到group by。亲爱的小伙伴,你是否知道group by的工作原理呢?group by和having有什么区别呢?group by的优化思路是怎样的呢?使用group by有哪些需要注意的问题呢?本文将跟大家一起来学习,攻克group by~
 
  1. 使用group by的简单例子
  group by一般用于分组统计,它表达的逻辑就是根据一定的规则,进行分组。我们先从一个简单的例子,一起复习一下哈。
 
  假设用一张员工表,表结构如下:
 
  CREATE TABLE `staff` (
    `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
    `id_card` varchar(20) NOT NULL COMMENT '身份证号码',
    `name` varchar(64) NOT NULL COMMENT '姓名',
    `age` int(4) NOT NULL COMMENT '年龄',
    `city` varchar(64) NOT NULL COMMENT '城市',
    PRIMARY KEY (`id`)
  ) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='员工表';
 
  2. group by 原理分析
  2.1 explain 分析
  我们先用explain查看一下执行计划
 
  explain select city ,count(*) as num from staff group by city;
  MySql中如何用group by
 
  Extra 这个字段的Using temporary表示在执行分组的时候使用了临时表
  Extra 这个字段的Using filesort表示使用了排序
  group by 怎么就使用到临时表和排序了呢?我们来看下这个SQL的执行流程
 
  2.2 group by 的简单执行流程
  explain select city ,count(*) as num from staff group by city;
  我们一起来看下这个SQL的执行流程哈
 
  创建内存临时表,表里有两个字段city和num;
  全表扫描staff的记录,依次取出city = 'X'的记录。
  判断临时表中是否有为 city='X'的行,没有就插入一个记录 (X,1);
  如果临时表中有city='X'的行的行,就将x 这一行的num值加 1;
  遍历完成后,再根据字段city做排序,得到结果集返回给客户端。

(编辑:武林网)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表