加入收藏 | 设为首页 | 会员中心 | 我要投稿 航空爱好网 (https://www.52kongjun.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySql中怎样用group by

发布时间:2022-06-17 13:01:08 所属栏目:MySql教程 来源:互联网
导读:日常开发中,我们经常会使用到group by。亲爱的小伙伴,你是否知道group by的工作原理呢?group by和having有什么区别呢?group by的优化思路是怎样的呢?使用group by有哪些需要注意的问题呢?本文将跟大家一起来学习,攻克group by~ 1. 使用group by的简单
  日常开发中,我们经常会使用到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做排序,得到结果集返回给客户端。

(编辑:航空爱好网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!