Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >group by 和聚合函数

group by 和聚合函数

作者头像
Ryan-Miao
发布于 2018-03-13 04:06:59
发布于 2018-03-13 04:06:59
2.1K00
代码可运行
举报
文章被收录于专栏:Ryan MiaoRyan Miao
运行总次数:0
代码可运行

group by 的基本用法                                                                                                                                                                                                       

  group by做为分组来使用,后面为条件,可以有多个条件,条件相同的为一组,配合聚合函数进行相关统计。在不同数据库中用法稍有不同,这里只测试mysql和oracle。

1.准备好一张数据表:

                mysql                                                        oracle

2.首先以name为分组条件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 SELECT * FROM person 
2 GROUP BY `name`;

在mysql中执行结果如下:

分析:

在mysql中没有强调select指定的字段必须属于group by后的条件。若符合条件的字段有多个,则只显示第一次出现的字段。比如:以name为dd分组,id为1,2,3,4,5,但只显示1.同理,age也只显示1.

然后,虽然这种查询在语法上通过了,但结果并没有什么意义,因为其他字段并非需要的准确值。这在oracle中就行不通了。

在oracle中执行结果如下:

分析:

  oracle指出,select查询字段未包含在group by 的条件中。推测,首先通过select * from person可以看到oracle中id并不是升序,或者说没有默认升序。也就是查询的结果是不确定的,hash?这可能涉及到在磁盘的存储等等,这里不去深究。因此,并不能确认第一次查出来的字段的值,而且分组后不是条件的值被合并后没有意义。

结论:

 group by语句中select指定的字段必须是“分组依据字段”。

因此,只能这样查询:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT name FROM person 
GROUP BY name;

结果一致:

3.以name,age为查询依据,多条件分组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 SELECT name,age FROM person 
2 GROUP BY name,age;

结果:

    mysql                   oracle

显然,两组的查询策略是不同的。但最终结果是相同的。都是以条件组合的笛卡尔积。也就是每个条件都一一对应。

分组依据为多条件组合成一个条件,当组合条件相同时为一组。因此,dd:1和dd:2分为两组。

4.添加聚合函数

聚合函数有如下几种:

函数

作用

支持性

sum(列名)

求和

max(列名)

最大值

min(列名)

最小值

avg(列名)

平均值

first(列名)

第一条记录

仅Access支持

last(列名)

最后一条记录

仅Access支持

count(列名)

统计记录数

注意和count(*)的区别

 首先,要明白聚合函数的用法。比如,count(列字段值),统计该字段值出现的次数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 SELECT name,COUNT(*) 
2 from person
3 GROUP BY name;

结果为:

分析:

  首先进行分组工作,group by name,这时8条数据被分成两组:dd和mm;然后count的作用就是统计每组里面的个数,分别是5和3.

更直观的例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM person;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 SELECT count(name) from person;

,count(name)为统计所有的name数量,同样的结果为count(1),count(*).

5.where 和 having

  • where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚组函数,使用where条件过滤出特定的行。
  • having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件过滤出特定的组,也可以使用多个分组标准进行分组。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL数据库,从入门到精通:第八篇——MySQL聚合函数实战探究:优化SELECT过程助力高效查询
在实际的业务应用中,聚合查询是最为常见的需求之一。MySQL的聚合函数允许我们对数据进行求和、平均、最大值、最小值、计数等统计操作,从而得到有用的信息。本文将全面讲解MySQL中的聚合函数,包括基础的聚合函数和进阶的分组、HAVING等,同时也会介绍SELECT的执行过程,帮助读者更好地理解SQL语句的执行过程。
默 语
2024/11/20
2140
MySQL数据库,从入门到精通:第八篇——MySQL聚合函数实战探究:优化SELECT过程助力高效查询
MySQL数据库基础(十):DQL数据查询语言
之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个单一的值;另外聚合函数会忽略空值。
Lansonli
2024/03/19
1430
MySQL数据库基础(十):DQL数据查询语言
GROUP BY与COUNT用法详解
在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数, 例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。
全栈程序员站长
2022/08/24
2.7K0
GROUP BY与COUNT用法详解
【MySql】聚合函数&&group by&&OJ题目
MySQL中的聚合函数用于对数据进行计算和统计,常见的聚合函数包括下面列举出来的聚合函数:
平凡的人1
2023/10/15
2240
【MySql】聚合函数&&group by&&OJ题目
数据库
脏读:当事务A正在访问数据并且做了修改(‘工资2000元’改成‘工资3000元’),但是还没来得及提交,这是事务B来访问数据并且使用了该数据(‘工资2000元’)
大学里的混子
2019/03/06
1.3K0
sql中的 where 、group by 和 having 用法解析
–如果要用到group by 一般用到的就是“每这个字” 例如说明现在有一个这样的表:每个部门有多少人 就要用到分组的技术
Twcat_tree
2022/11/30
13K0
【0基础学习mysql】之DQL-聚合函数、分组查询及排序查询
CSDN话题挑战赛第2期 参赛话题:学习笔记 学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众
天寒雨落
2022/11/20
1K0
【0基础学习mysql】之DQL-聚合函数、分组查询及排序查询
Python数据库操作 DQL-MySQL数据库查询sql#学习猿地
+ where子句类似程序语言中if条件,根据mysql表中的字段值来进行数据的过滤
学习猿地
2020/03/20
1K0
mysql聚合函数(含MySQL语句执行原理讲解)
 其实,对于MyISAM引擎的表是没有区别的。这种引擎内部有一计数器在维护着行数。Innodb引擎的表用count(*),count(1)直接读行数,复杂度是O(n),因为innodb真的要去数一遍。但好于具体的count(列名)。
一个风轻云淡
2022/11/13
1.7K0
mysql聚合函数(含MySQL语句执行原理讲解)
数据库的检索语句
仅仅要运行“SELECT * FROM 名”就可以。SELECT * FROM T_Employee 。
全栈程序员站长
2022/07/06
2.5K0
数据库的检索语句
【mysql】聚合函数
Innodb引擎的表用count(*),count(1)直接读行数,复杂度是O(n),因为innodb真的要去数一遍。但好于具体的count(列名)。
兮动人
2022/03/18
3.3K0
SQL中GROUP BY语句介绍
本文主要介绍 SQL(Structured Query Language)中 GROUP BY 语句的相关知识,同时通过用法示例介绍 GROUP BY 语句的常见用法。
Twcat_tree
2022/12/05
1.6K0
SQL中GROUP BY语句介绍
【Java 进阶篇】深入理解 SQL 聚合函数
在 SQL 数据库中,聚合函数是一组强大的工具,用于处理和分析数据。它们可以帮助您对数据进行统计、计算总和、平均值、最大值、最小值等操作。无论您是数据库开发者、数据分析师还是希望更好地了解 SQL 数据库的用户,了解聚合函数都是非常重要的。
繁依Fanyi
2023/10/12
6190
【Java 进阶篇】深入理解 SQL 聚合函数
基础SQL-DQL语句-条件查询-排序-聚合函数-分组-limit语句
前面我们的查询都是将所有数据都查询出来,但是有时候我们只想获取到满足条件的数据 语法格式:SELECT 字段名 FROM 表名 WHERE 条件;流程:取出表中的每条数据,满足条件的记录就返回,不满足条件的记录不返回
Devops海洋的渔夫
2022/01/17
3.6K0
基础SQL-DQL语句-条件查询-排序-聚合函数-分组-limit语句
Vc数据库编程基础MySql数据库的表查询功能
  不管是任何数据库.都会有查询功能.而且是很重要的功能.上一讲知识简单的讲解了表的查询所有.
IBinary
2019/05/25
9.7K0
DQL-聚合函数
聚合函数对一组值执行计算并返回单一的值。除 COUNT 以外,聚合函数忽略空值,如果COUNT函数的应用对象是一个确定列名,并且该列存在空值,此时COUNT仍会忽略空值。
星哥玩云
2022/09/15
9220
SQL语句汇总(三)——聚合函数、分组、子查询及组合查询
分组中也可以加入筛选条件WHERE,不过这里一定要注意的是,执行顺序为:WHERE过滤→分组→聚合函数。牢记!
_DIY
2020/05/29
5.1K0
SQL语句汇总(三)——聚合函数、分组、子查询及组合查询
深入浅出谈开窗函数(一)
在开窗函数出现之前存在着非常多用 SQL 语句非常难解决的问题,非常多都要通过复杂的相关子查询或者存储过程来完毕。为了解决这些问题,在2003年ISO SQL标准添�了开窗函数,开窗函数的使用使得这些经典的难题能够被轻松的解决。眼下在 MSSQLServer、Oracle、DB2 等主流数据库中都提供了对开窗函数的支持,只是非常遗憾的是 MYSQL 临时还未对开窗函数给予支持。
全栈程序员站长
2021/12/08
9420
MongoDB基本聚合函数使用
$match是MongoDB聚合函数中最常见的函数之一。它允许用户根据指定的条件过滤文档。例如,如果我们有一个存储员工信息的集合,并且想要查找所有工资大于5000的员工,可以使用以下命令:
玖叁叁
2023/04/14
7460
【重学 MySQL】三十七、聚合函数
聚合函数(Aggregate Functions)在数据库查询中扮演着至关重要的角色,特别是在处理大量数据时。它们能够对一组值执行计算,并返回一个汇总后的单一值。这些函数在处理统计、报告生成以及数据分析等任务时特别有用。
用户11332765
2024/10/28
1140
【重学 MySQL】三十七、聚合函数
推荐阅读
相关推荐
MySQL数据库,从入门到精通:第八篇——MySQL聚合函数实战探究:优化SELECT过程助力高效查询
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文