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的用法及原理详解相关推荐

  1. Sklearn中predict_proba函数用法及原理详解

    Sklearn中predict_proba函数用法及原理详解(以logistic回归为例) 网上对predict_proba的数学原理解释的太少了,也不明确,特意总结一下,并给出有些不能用该方法的原因 ...

  2. python中的super用法详解_python super用法及原理详解

    这篇文章主要介绍了python super用法及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 概念 super作为python的内建函数. ...

  3. JAVA Stream的collect用法与原理(详解)

    初识Collector 先看一个简单的场景: 现有集团内所有人员列表,需要从中筛选出上海子公司的全部人员 假定人员信息数据如下: 姓名 子公司 部门 年龄 工资 大壮 上海公司 研发一部 28 300 ...

  4. repo用法及原理详解,干了啥干了啥

    各种博客上经常看到下载repo代码.赋予权限,然后就使用,你真的理解它在做什么吗? curl https://storage.googleapis.com/git-repo-downloads/rep ...

  5. Git 原理详解及实用指南

    Git 原理详解及实用指南 什么是版本控制系统(VCS) 很多人认为 Git 难以理解的第一个门槛在于:所谓的「Git 是一个分布式版本控制系统」这句话的具体含义不够清楚.其实分布式版本控制系统(Di ...

  6. python装饰器性能_python装饰器的特性原理详解

    这篇文章主要介绍了python装饰器的特性原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天发现了装饰器的另一种用法,下面就先上代码: d ...

  7. 蓝牙:CRC原理详解(附crc16校验代码)

    CRC原理详解(附crc16校验代码) 参考链接: https://www.cnblogs.com/esestt/archive/2007/08/09/848856.html Cyclic Redun ...

  8. 一致性哈希算法原理详解

    一.普通 hash 算法 (取模算法): 在了解一致性哈希算法之前,我们先了解一下缓存中的一个应用场景,了解了这个应用场景之后,再来理解一致性哈希算法,就容易多了,也更能体现出一致性哈希算法的优点,那 ...

  9. 循环神经网络RNN、LSTM、GRU原理详解

    一.写在前面 这部分内容应该算是近几年发展中最基础的部分了,但是发现自己忘得差不多了,很多细节记得不是很清楚了,故写这篇博客,也希望能够用更简单清晰的思路来把这部分内容说清楚,以此能够帮助更多的朋友, ...

最新文章

  1. 流氓网站5599.net修改ie主页分析
  2. fastjson 添加key value_Redis中设置了过期时间的Key,那么你还要知道些什么?
  3. ETL工具箱 5提交维表
  4. Java final、static final 讲解
  5. 如何用C语言清空特定文件夹中的所有文件
  6. VMware安装Linux ubuntu虚拟机
  7. ab压力测试(了解ab工具,实验对网页进行测试)
  8. 力扣Java编译器_力扣--设计单链表
  9. mysql e 变量_mysql 变量简介
  10. jstack会导致JVM停顿
  11. matlab判断向量组线性相关性的三种方法
  12. 软件开发者优质资源网站
  13. 海风科技快速开发平台和构件的由来(一)
  14. php mysql完全自学手册 smarty_PHPSmarty完全开发手册.pdf
  15. 在一个页面的多个位置同时显示不同的Toastr提示信息
  16. BitTorrent DHT 协议中文翻译
  17. Oracle查询锁表
  18. 水果店差别定价策略,水果店的单品定价公式
  19. HDU5142 NPY and FFT BestCoder Round #22 1001
  20. python处理excel数据画曲线图_python读取excel数据绘制简单曲线图的完整步骤记录...

热门文章

  1. 三菱空调红外码值编码规则解析
  2. 介绍Python的@property装饰器的用法_python_脚本之家
  3. Android 微信支付集成
  4. 美国大规模“断网”暴露哪些问题
  5. 2022年运动鞋服行业的发展趋势
  6. 解决启动虚拟机进入系统时宿主机自动重启状态问题
  7. TextView文本颜色状态选择器
  8. 传言2032年是世界末日? 科学家称此事并非空穴来风
  9. 新的代数计算软件包——Magma
  10. 如何手动修改win7特定文件的图标?