groupby的用法及原理详解
groupby的用法及原理详解_回家养老-CSDN博客_groupby
写在前面的话:用了好久group by,今天早上一觉醒来,突然感觉group by好陌生,总有个筋别不过来,为什么不能够select * from Table group by id,为什么一定不能是*,而是某一个列或者某个列的聚合函数,group by 多个字段可以怎么去很好的理解呢?不过最后还是转过来了,简单写写吧,大牛们直接略过吧。
=========正文开始===========
先来看下表1,表名为test:
表1
执行如下SQL语句:
SELECTnameFROMtestGROUPBYname |
你应该很容易知道运行的结果,没错,就是下表2:
表2
可是为了能够更好的理解“group by”多个列“和”聚合函数“的应用,我建议在思考的过程中,由表1到表2的过程中,增加一个虚构的中间表:虚拟表3。下面说说如何来思考上面SQL语句执行情况:
1.FROM test:该句执行后,应该结果和表1一样,就是原来的表。
2.FROM test Group BY name:该句执行后,我们想象生成了虚拟表3,如下所图所示,生成过程是这样的:group by name,那么找name那一列,具有相同name值的行,合并成一行,如对于name值为aa的,那么<1 aa 2>与<2 aa 3>两行合并成1行,所有的id值和number值写到一个单元格里面。
3.接下来就要针对虚拟表3执行Select语句了:
(1)如果执行select *的话,那么返回的结果应该是虚拟表3,可是id和number中有的单元格里面的内容是多个值的,而关系数据库就是基于关系的,单元格中是不允许有多个值的,所以你看,执行select * 语句就报错了。
(2)我们再看name列,每个单元格只有一个数据,所以我们select name的话,就没有问题了。为什么name列每个单元格只有一个值呢,因为我们就是用name列来group by的。
(3)那么对于id和number里面的单元格有多个数据的情况怎么办呢?答案就是用聚合函数,聚合函数就用来输入多个数据,输出一个数据的。如cout(id),sum(number),而每个聚合函数的输入就是每一个多数据的单元格。
(4)例如我们执行select name,sum(number) from test group by name,那么sum就对虚拟表3的number列的每个单元格进行sum操作,例如对name为aa的那一行的number列执行sum操作,即2+3,返回5,最后执行结果如下:
(5)group by 多个字段该怎么理解呢:如group by name,number,我们可以把name和number 看成一个整体字段,以他们整体来进行分组的。如下图
(6)接下来就可以配合select和聚合函数进行操作了。如执行select name,sum(id) from test group by name,number,结果如下图:
https://blog.csdn.net/weixin_42724467/article/details/89378526
groupby的用法及原理详解相关推荐
- Sklearn中predict_proba函数用法及原理详解
Sklearn中predict_proba函数用法及原理详解(以logistic回归为例) 网上对predict_proba的数学原理解释的太少了,也不明确,特意总结一下,并给出有些不能用该方法的原因 ...
- python中的super用法详解_python super用法及原理详解
这篇文章主要介绍了python super用法及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 概念 super作为python的内建函数. ...
- JAVA Stream的collect用法与原理(详解)
初识Collector 先看一个简单的场景: 现有集团内所有人员列表,需要从中筛选出上海子公司的全部人员 假定人员信息数据如下: 姓名 子公司 部门 年龄 工资 大壮 上海公司 研发一部 28 300 ...
- repo用法及原理详解,干了啥干了啥
各种博客上经常看到下载repo代码.赋予权限,然后就使用,你真的理解它在做什么吗? curl https://storage.googleapis.com/git-repo-downloads/rep ...
- Git 原理详解及实用指南
Git 原理详解及实用指南 什么是版本控制系统(VCS) 很多人认为 Git 难以理解的第一个门槛在于:所谓的「Git 是一个分布式版本控制系统」这句话的具体含义不够清楚.其实分布式版本控制系统(Di ...
- python装饰器性能_python装饰器的特性原理详解
这篇文章主要介绍了python装饰器的特性原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天发现了装饰器的另一种用法,下面就先上代码: d ...
- 蓝牙:CRC原理详解(附crc16校验代码)
CRC原理详解(附crc16校验代码) 参考链接: https://www.cnblogs.com/esestt/archive/2007/08/09/848856.html Cyclic Redun ...
- 一致性哈希算法原理详解
一.普通 hash 算法 (取模算法): 在了解一致性哈希算法之前,我们先了解一下缓存中的一个应用场景,了解了这个应用场景之后,再来理解一致性哈希算法,就容易多了,也更能体现出一致性哈希算法的优点,那 ...
- 循环神经网络RNN、LSTM、GRU原理详解
一.写在前面 这部分内容应该算是近几年发展中最基础的部分了,但是发现自己忘得差不多了,很多细节记得不是很清楚了,故写这篇博客,也希望能够用更简单清晰的思路来把这部分内容说清楚,以此能够帮助更多的朋友, ...
最新文章
- 流氓网站5599.net修改ie主页分析
- fastjson 添加key value_Redis中设置了过期时间的Key,那么你还要知道些什么?
- ETL工具箱 5提交维表
- Java final、static final 讲解
- 如何用C语言清空特定文件夹中的所有文件
- VMware安装Linux ubuntu虚拟机
- ab压力测试(了解ab工具,实验对网页进行测试)
- 力扣Java编译器_力扣--设计单链表
- mysql e 变量_mysql 变量简介
- jstack会导致JVM停顿
- matlab判断向量组线性相关性的三种方法
- 软件开发者优质资源网站
- 海风科技快速开发平台和构件的由来(一)
- php mysql完全自学手册 smarty_PHPSmarty完全开发手册.pdf
- 在一个页面的多个位置同时显示不同的Toastr提示信息
- BitTorrent DHT 协议中文翻译
- Oracle查询锁表
- 水果店差别定价策略,水果店的单品定价公式
- HDU5142 NPY and FFT BestCoder Round #22 1001
- python处理excel数据画曲线图_python读取excel数据绘制简单曲线图的完整步骤记录...