iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL之group by分组查询
  • 542
分享到

MySQL之group by分组查询

MySQL之groupby分组查询 2015-05-12 08:05:56 542人浏览 才女
摘要

有如下数据: 一个简单的分组查询的案例 按照部门编号deptno分组,统计每个部门的平均工资。 select deptno,avg(sal) avgs from emp group by deptno; 结果如下: gro

MySQL之group by分组查询

有如下数据:

一个简单的分组查询的案例

按照部门编号deptno分组,统计每个部门的平均工资。

select deptno,avg(sal) avgs
from emp
group by deptno;

结果如下:

group by关键字语法详解

group by是用于分组查询的关键字,一般是配合sum(),avg(),count(),max(),min()聚合函数使用的。也就是说sql语句中只要有group by,那么在select后面的展示字段中一般会有聚合函数(5个聚合函数)中的一个或多个函数出现。观察上图用表中的字段A进行分组后,一般就需要对表中的其它字段,使用聚合函数,这样意义更大,而不是还对字段A使用聚合函数。

当SQL语句中使用了group by后,在select后面一定有一个字段使用了聚合函数(5个聚合函数)。但是除了这个聚合函数,select后面还可以添加其他什么字段吗?

答案肯定是可以的!但是该字段有一定的限制,并不是什么字段都可以。也就是说,当SQL语句中使用了group by关键字后,select后面除了聚合函数,就只能是group by后面出现的字段。也就是图中的字段A,select后面只能存在group by后面的字段。

分组前筛选和分组后筛选

原始表和结果集的概念

  • 原始表指的是数据库真正存在的那个表,使用【select * from 表名】查询出来的就是原始表信息。
  • 结果集指的是在SQL语句中,添加其它任何一个限制条件,最终展示给我们表,都是结果集。添加不同的限制条件,查询出来的结果集也是不同的。
  • 原始表只有一个,结果集却是各种各样的。

where筛选和having筛选选用

  • 只要是需求中,涉及到聚合函数做条件的情况,一定是分组后的筛选
  • 能用分组前筛选的,就优先考虑分组前的筛选。(考虑到性能问题)

分组前筛选

  • 查询姓名中包含S字符的,每个部门的工资之和。
select deptno,sum(sal)
from emp
where ename like "%S%"
group by deptno;

  • 查询工资大于2000的,不同部门的平均工资。
select deptno,avg(sal)
from emp
where sal > 2000
group by deptno;

分组后筛选

  • 查询部门员工个数大于3的部门编号和员工个数。
select deptno,count(*)
from emp
group by deptno
haveing count(*) > 3;

  • 查询每个部门最高工资大于3000的部门编号和最高工资。
select deptno,max(sal) maxs
from emp
group by deptno
having maxs count(*) > 3;

分组前筛选和分组后筛选合用

  • 查询1981年入职的,不同部门间工资的平均值大于2000的部门编号和平均值。
select deptno,avg(sal) avgs
from emp
where year(hiredate) = "1981"
group by deptno
having avgs > 2000;

分组查询(按函数分组)

  • 按员工姓名的长度分组,查询每一组的员工个数,筛选员工个数>3的有哪些?
select length(ename) len, count(*) counts
from emp
group by len
having counts > 3;

分组查询(按多个字段分组)

  • 查询每个部门每个工种的员工的平均工资。
select deptno,jop,avg(sal) avgs
from emp
group by deptno,job;

group by和order by

  • 查询每个部门的员工的平均工资,按照平均工资降序。
select deptno,jop,avg(sal) avgs
from emp
group by deptno
order by avgs desc;

  • 查询每个部门的员工的平均工资,按照平均工资升序。
select deptno,jop,avg(sal) avgs
from emp
group by deptno
order by avgs asc;

总结

  • 分组函数做条件,肯定是放在having子句中。
  • 能用分组前筛选的,就优先考虑使用分组前筛选。(where筛选)
  • group by子句支持单个字段分组,多个字段分组(多个字段之间用逗号隔开没有顺序要求),还支持函数分组(用的较少)。
您可能感兴趣的文档:

--结束END--

本文标题: MySQL之group by分组查询

本文链接: https://www.lsjlt.com/news/8722.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Mysql之分组查询,Group By,Group Having的用法
    一、group by 的用法 group by ,在mysql中用来给字段分组,sql语句如下,这是一条用来统计男女数量的sql语句。 这里我们要注意到,group by ,一定是和聚合函数配合使用的,而不能直接使用select...
    99+
    2023-08-17
    mysql 数据库 sql
  • MySQL数据库分组查询group by语句详解
    一:分组函数的语句顺序 1 SELECT ... 2 FROM ... 3 WHERE ... 4 GROUP BY ...
    99+
    2024-04-02
  • MySQL入门 - 数据分组之 group by
    作者:汤圆学Java 个人博客:https://www.javalover.cc/ 前言 group by 用来对数据进行分组,即按照指定的字段或者表达式进行分组; 目录 group by 语句介绍...
    99+
    2023-09-08
    mysql 数据库 sql
  • mysql查询语句group by和order by的使用
    这篇文章主要讲解了“mysql查询语句group by和order by的使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql查询语句group b...
    99+
    2024-04-02
  • mysql中group by分组查询中查询最新字段值的sql语句怎么写?
    目录 背景需求效率不高的sql写法效率高的sql写法拓展 背景 今天看代码的时候,看到一个比较复杂的sql语句,我知道这条sql语句最终想要实现的结果,所以我就想自己写sql来实现一下...
    99+
    2023-09-11
    mysql sql 数据库
  • 在SQL查询中GROUP BY
    这篇文章主要介绍在SQL查询中GROUP BY,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在SQL查询中GROUP BY的含义是什么?在SQL查询中GROUP BY的含义是根据指定...
    99+
    2024-04-02
  • MySQL order by与group by查询优化实现详解
    目录前言where与order by满足最左匹配法则中间断裂大哥不在范围失效order by 次序相反覆盖索引filesort的两种算法group by前言 order by满足两种情况,会使用 index 方...
    99+
    2024-04-02
  • Mysql GROUP BY 查询每组某值最大的一条数据
    表结构如下: 需求:查询每个学科(type)最高分(score) 想要的结果如下: 尝试通过group by order by 查询 sql 如下 SELECT * FROM `repor...
    99+
    2023-09-05
    mysql 数据库 sql
  • 分组查询GROUP BY的使用与SQL执行顺序的讲解
    在SQL中使用GROUP BY来对SELECT的结果进行数据分组,在具体使用GROUP BY之前需要知道一些重要的规定。 1、GROUP BY子句可以包含任意数目的列。也就是说可以在组里再分组...
    99+
    2024-04-02
  • 在sql查询中group by有什么用
    小编给大家分享一下在sql查询中group by有什么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在sql查询中group by的含义是用于结合合计函数,根据一个或多个列对结果集进行分...
    99+
    2024-04-02
  • 如何实现group by慢查询优化
    小编今天带大家了解如何实现group by慢查询优化,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答...
    99+
    2024-04-02
  • mysql怎么使用left join和group by实现高效查询
    这期内容当中小编将会给大家带来有关mysql怎么使用left join和group by实现高效查询,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。mysql高效查询mysql牺牲了group by来增加l...
    99+
    2023-06-15
  • MySQL踩坑之-- group by 和 limit 组合使用效率优化
    应公司业务需求,开发一个费用统计报表;其实本来没啥技术含量,但是踩了一个坑需要记录一下;相信大家在写统计sql的时候,group by是经常会用到的吧,如果数据量过大呢?是不是需要分页,这里就需要用到limit作查询限制,那么问题就来了...
    99+
    2023-08-18
    mysql sql 数据库
  • SQL:用count求group by分组的个数
    1、求每一分组内的个数 查询选修了全部课程的学生姓名 思路 查询一个学生的姓名,该学生选修课的门数等于所有课程的门数 逆推:查询一个学生的姓名,姓名怎么来?通过Student的学...
    99+
    2023-08-31
    sql 数据库 mysql
  • mysql之group by和having用法详解
    GROUP BY语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。 select子句中的列名必须为分组列或列函数,列函数对于group by子...
    99+
    2024-04-02
  • group by聚合分组后如何获取分组数据
    之前用group by分组后一直困惑怎么把分组后的数据拿到,因为分组后同一组的只有一条数据,最后发现了group_concat函数。记录一下,以后能用。 语法:group_concat( [distinct] 要连接的字段 [o...
    99+
    2023-09-23
    数据库 mysql Powered by 金山文档
  • mysql怎么分组查询
    mysql分组查询的方法:使用GROUP BY语句进行分组,根据一个或多个列对结果集进行分组。具体操作步骤:可以使用GROUP BY语句进行分组,GROUP BY语句能够根据一个或多个列对结果集进行分组。示例:首先新建一个数据,例如将以下数...
    99+
    2024-04-02
  • MySQL group by对单字分组序和多字段分组的方法讲解
    我这里创建了一个 goods 表,先看下里面的数据: mysql> select * from goods; +----+------+------+------------+-----...
    99+
    2024-04-02
  • 高版本Mysql使用group by分组报错如何解决
    这篇文章主要讲解了“高版本Mysql使用group by分组报错如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“高版本Mysql使用grou...
    99+
    2023-03-09
    groupby group by
  • SQL汇总统计与GROUP BY过滤查询实现
    目录1、汇总统计2、GROUT BY3、如何对分组统计的结果进行过滤4、如何对分组统计的结果进行排序5、介绍SELECT语句中各个子句的书写顺序6、上方用到的表1、汇总统计 介绍几个聚集函数 有多少名学生 SE...
    99+
    2023-01-05
    SQL汇总统计 SQLGROUPBY
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作