mysql中的group by分组
目录
- 前言
- `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
,可是id
和number
中有的单元格里面的内容是有多个值的,而关系型数据库就是基于关系的,单元格中是不允许有多个值的。所以执行SELECT * FROM user_info GROUP BY name;
时语句就报错了 - 我们再看
name
列,每个单元格只有一个数据,所以我们select name
的话,就没有问题了。为什么name
列每个单元格只有一个值呢,因为我们就是用name
列来group by
的 - 那么对于
id
和number
里面的单元格有多个数据的情况怎么办呢?答案就是用聚合函数,聚合函数就用来输入多个数据,输出一个数据的。如count(id),sum(number)
,而每个聚合函数的输入就是每一个多数据的单元格 - 如我们执行
SELECT `name`,SUM(number) FROM user_info GROUP BY `name`;
那么 sum
就对虚拟表 3
的 number
列的每个单元格进行 sum
操作,如对 name
为 aa
的那一行的 number
列执行 sum
操作,即 2 + 3 = 5
。最后执行结果如下
group by
多个字段该怎么理解呢?如group by name, number
,我们可以把name
和number
看成一个整体字段,以他们整体
来进行分组的。如下图
- 接下来就可以配合
select
和聚合函数进行操作了。如执行
SELECT `name`, sum(id) FROM user_info GROUP BY `name`, number;
结果如下图
group by
和 distinct
去重
单列去重
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 by
和 distinct
结果是相同的
执行方式
distinct
主要是对数据两两进行比较,需要遍历整个表group by
是在查询时先把数据按照分组字段分组出来再查询,当数据量较大时,group by
速度要优于distinct
原文:https://blog.csdn.net/u014717572/article/details/80687042
mysql中的group by分组相关推荐
- MySql中执行 GROUP BY 分组 遇到 1055错误
Mysql中执行sql语句报错,为什么同样类型的SQL语句,上面这个会报错,下面这个执行正常?
- mysql按年月排序group by升序_排序-在MySQL中按GROUP BY名称之前的日期和时间排序
排序-在MySQL中按GROUP BY名称之前的日期和时间排序 我有这样一张桌子: name date time tom | 2011-07-04 | 01:09:52 tom | 2011-07-0 ...
- mysql count order by_【数据库】mysql中count(), group by, order by使用方法分享
本文主要和大家分享mysql中count(), group by, order by使用方法,mysql中order by 排序查询.asc升序.desc降序,group by 分组查询.having ...
- 使用SQL语句中的Group by分组并计算每组的数量
在SQL语句中,Group by一般用来做分组统计使用,在实际的开发中我们可能会遇到不仅需要分组,还需统计出每组的数量条数,那这时候可以结合count函数来一起使用即可完成此项操作,最后的结果展示出所 ...
- mysql中合并函数_MYSQL分组合并函数
MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔 ...
- mysql最长字段_在mysql中使用GROUP BY时,如何选择最长的文本字段?
在 MySql中,您可以使用MAX()函数来获取最高的值,当使用GROUP BY时,我该怎么做同样的事情来获得最长的文本字符串? 样品表: id_|_post_id|_title__________| ...
- 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 ...
- mysql中关于group的语句指令_关于group by 以下语句正确的是( )_学小易找答案...
[简答题]请结合油梨保花保果综合技术实训,总结现阶段油梨保花保果的主要措施. [简答题]请根据实地观察结果,确定以下油梨品种所处的物候期,并推测该物候期的始期和终期: 哈期(Hass): 桂垦大2号: ...
- mysql中关于group的语句指令_mysql不支持group by的解决方法小结
下载安装的是最新版的mysql5.7.x版本,默认是开启了 only_full_group_by 模式的,但开启这个模式后,原先的 group by 语句就报错,然后又把它移除了. 一旦开启 only ...
- 秒懂mysql中的group by用法
文章转载自:https://blog.csdn.net/u014717572/article/details/80687042 先来看下表1,表名为test: 执行如下SQL语句: SELECT na ...
最新文章
- android:AlertDialog控件
- 关于windows对话框
- ML 04、模型评估与模型选择
- 图像锐化算法(Image sharpening):拉普拉斯增强和Unsharp Masking(附代码)
- iOS之深入解析内存管理MRC与ARC机制
- 网贷申请技巧,提高90%通过率
- 一周学C#第五天——命名空间
- RX异常点检测算法(马氏距离)
- python中输出某段文字_Python如何输出字符串中字符出现的个数
- 【细节实现题】LeetCode 56. Merge Intervals
- 各类程序开发下载地址备注:
- Python语音基础操作--5.4小波分解
- 面试被问“红黑树”,我一脸懵逼......
- hr面试性格测试30题_人事面试--测试篇--30
- 【加密算法】3DES加密算法
- cropped-p_large_a5mR_25c0000419eb2d0c.jpg
- 平面向量加法 (15 分)
- 9个精品AI开源免费实战项目助你掌握AI工程师基本技能
- 2022/09/20、21 day09/10:JavaScript(三)
- IDEA 安装快捷键提示工具:Key promoter X
热门文章
- 极客大学产品经理训练营 认识产品经理 作业1
- AWS亚马逊ssh登录失败 Permissions 0644 for .pem are too open
- 2021-09-08 全排列
- mysql数据库MyISAM存储引擎_MySQL数据库MyISAM存储引擎
- 远程登录shell命名sftp_开发好物推荐13强于XShell远程连接FinalSHell
- 橘子游戏平台_腾讯游戏主播认证名单公布,唯独张大仙缺席
- 天池客流预测–GBDT
- Beautiful Soup 4.2.0 文档
- 【16年浙江省赛 B ZOJ 3937】More Health Points【树上dfs、斜率优化dp、动态维护下凸壳】
- Bias and Variance with Mismatched Distributions