目录

  • 前言
  • `group by` 分组内幕
    • 数据准备
    • `group by` 分组查询
    • `group by` 分组查询流程
      • 生成虚拟表
      • 执行相关查询
  • `group by` 和 `distinct` 去重
    • 单列去重
    • 多列去重
    • 执行方式

前言

为什么不能够 select * from table_name group by name 为什么一定不能是 *,而是某一个列或者某个列的聚合函数,group by 多个字段可以怎么去很好的理解呢?

group by 分组内幕

数据准备

建表语句如下

CREATE TABLE `user_info` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) NOT NULL,`number` int(11) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4;

表数据如下

group by 分组查询

首先执行 SELECT * 语句

SELECT * FROM user_info GROUP BY `name`;

结果如下

再执行 SELECT name 如下查询

SELECT `name` FROM user_info GROUP BY `name`;

结果如下

group by 分组查询流程

下面的流程步骤未必正确,只是帮助更深入理解 group by 分组

生成虚拟表

  • FROM user_info:该句执行后,结果就是原来的表(原数据表)
  • FROM user_info GROUP BY name:该句执行后,我们 想象 生成了虚拟表 3,如下所图所示


生成过程是这样的:group by name,那么找 name 那一列,具有相同 name 值的行,合并成一行,如对于 name 值为 aa 的,那么 <1 aa 2><2 aa 3> 两行合并成 1 行,所有的 id 值和 number 值写到一个单元格里面

执行相关查询

接下来就要针对虚拟表 3 执行 select

  • 如果执行 select * 的话,那么返回的结果应该是虚拟表 3,可是 idnumber 中有的单元格里面的内容是有多个值的,而关系型数据库就是基于关系的,单元格中是不允许有多个值的。所以执行 SELECT * FROM user_info GROUP BY name; 时语句就报错了
  • 我们再看 name 列,每个单元格只有一个数据,所以我们 select name 的话,就没有问题了。为什么 name 列每个单元格只有一个值呢,因为我们就是用 name 列来 group by
  • 那么对于 idnumber 里面的单元格有多个数据的情况怎么办呢?答案就是用聚合函数,聚合函数就用来输入多个数据,输出一个数据的。如 count(id),sum(number),而每个聚合函数的输入就是每一个多数据的单元格
  • 如我们执行
SELECT `name`,SUM(number) FROM user_info GROUP BY `name`;

那么 sum 就对虚拟表 3number 列的每个单元格进行 sum 操作,如对 nameaa 的那一行的 number 列执行 sum 操作,即 2 + 3 = 5。最后执行结果如下

  • group by 多个字段该怎么理解呢?如 group by name, number,我们可以把 namenumber 看成一个整体字段,以他们 整体 来进行分组的。如下图

  • 接下来就可以配合 select 和聚合函数进行操作了。如执行
SELECT `name`, sum(id) FROM user_info GROUP BY `name`, number;

结果如下图

group bydistinct 去重

单列去重

SELECT DISTINCT `name` FROM user_info;SELECT `name` FROM user_info GROUP BY name;

二者去重结果是一样的,如下

多列去重

SELECT DISTINCT `name`,number FROM user_info;SELECT `name`,number FROM user_info GROUP BY `name`,number;

二者去重结果是一样的,如下


结论:对于单列或多列去重,使用 group bydistinct 结果是相同的

执行方式

  • distinct 主要是对数据两两进行比较,需要遍历整个表
  • group by 是在查询时先把数据按照分组字段分组出来再查询,当数据量较大时,group by 速度要优于 distinct

原文:https://blog.csdn.net/u014717572/article/details/80687042

mysql中的group by分组相关推荐

  1. MySql中执行 GROUP BY 分组 遇到 1055错误

    Mysql中执行sql语句报错,为什么同样类型的SQL语句,上面这个会报错,下面这个执行正常?

  2. mysql按年月排序group by升序_排序-在MySQL中按GROUP BY名称之前的日期和时间排序

    排序-在MySQL中按GROUP BY名称之前的日期和时间排序 我有这样一张桌子: name date time tom | 2011-07-04 | 01:09:52 tom | 2011-07-0 ...

  3. mysql count order by_【数据库】mysql中count(), group by, order by使用方法分享

    本文主要和大家分享mysql中count(), group by, order by使用方法,mysql中order by 排序查询.asc升序.desc降序,group by 分组查询.having ...

  4. 使用SQL语句中的Group by分组并计算每组的数量

    在SQL语句中,Group by一般用来做分组统计使用,在实际的开发中我们可能会遇到不仅需要分组,还需统计出每组的数量条数,那这时候可以结合count函数来一起使用即可完成此项操作,最后的结果展示出所 ...

  5. mysql中合并函数_MYSQL分组合并函数

    MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔 ...

  6. mysql最长字段_在mysql中使用GROUP BY时,如何选择最长的文本字段?

    在 MySql中,您可以使用MAX()函数来获取最高的值,当使用GROUP BY时,我该怎么做同样的事情来获得最长的文本字符串? 样品表: id_|_post_id|_title__________| ...

  7. MySQL中 (GROUP BY 用法)和(ORDER BY用法)

    一.GROUP BY(分组) 例子: SELECT sum(id) as aa_id, max(id) as m_id, message FROM device_shadow_log GROUP BY ...

  8. mysql中关于group的语句指令_关于group by 以下语句正确的是( )_学小易找答案...

    [简答题]请结合油梨保花保果综合技术实训,总结现阶段油梨保花保果的主要措施. [简答题]请根据实地观察结果,确定以下油梨品种所处的物候期,并推测该物候期的始期和终期: 哈期(Hass): 桂垦大2号: ...

  9. mysql中关于group的语句指令_mysql不支持group by的解决方法小结

    下载安装的是最新版的mysql5.7.x版本,默认是开启了 only_full_group_by 模式的,但开启这个模式后,原先的 group by 语句就报错,然后又把它移除了. 一旦开启 only ...

  10. 秒懂mysql中的group by用法

    文章转载自:https://blog.csdn.net/u014717572/article/details/80687042 先来看下表1,表名为test: 执行如下SQL语句: SELECT na ...

最新文章

  1. android:AlertDialog控件
  2. 关于windows对话框
  3. ML 04、模型评估与模型选择
  4. 图像锐化算法(Image sharpening):拉普拉斯增强和Unsharp Masking(附代码)
  5. iOS之深入解析内存管理MRC与ARC机制
  6. 网贷申请技巧,提高90%通过率
  7. 一周学C#第五天——命名空间
  8. RX异常点检测算法(马氏距离)
  9. python中输出某段文字_Python如何输出字符串中字符出现的个数
  10. 【细节实现题】LeetCode 56. Merge Intervals
  11. 各类程序开发下载地址备注:
  12. Python语音基础操作--5.4小波分解
  13. 面试被问“红黑树”,我一脸懵逼......
  14. hr面试性格测试30题_人事面试--测试篇--30
  15. 【加密算法】3DES加密算法
  16. cropped-p_large_a5mR_25c0000419eb2d0c.jpg
  17. 平面向量加法 (15 分)
  18. 9个精品AI开源免费实战项目助你掌握AI工程师基本技能
  19. 2022/09/20、21 day09/10:JavaScript(三)
  20. IDEA 安装快捷键提示工具:Key promoter X

热门文章

  1. 极客大学产品经理训练营 认识产品经理 作业1
  2. AWS亚马逊ssh登录失败 Permissions 0644 for .pem are too open
  3. 2021-09-08 全排列
  4. mysql数据库MyISAM存储引擎_MySQL数据库MyISAM存储引擎
  5. 远程登录shell命名sftp_开发好物推荐13强于XShell远程连接FinalSHell
  6. 橘子游戏平台_腾讯游戏主播认证名单公布,唯独张大仙缺席
  7. 天池客流预测–GBDT
  8. Beautiful Soup 4.2.0 文档
  9. 【16年浙江省赛 B ZOJ 3937】More Health Points【树上dfs、斜率优化dp、动态维护下凸壳】
  10. Bias and Variance with Mismatched Distributions