首页 > 数据库 >4.2 数据库分组查询

4.2 数据库分组查询

时间:2024-12-25 22:56:50浏览次数:9  
标签:group 4.2 数据库 sal 分组 子句 deptno select

1、为什么要分组

上一节课我们学习了聚合函数,默认统计的是全表范围的数据。配合上where子句就能缩小统计的范围了,但是这并不能满足我们的要求。比如说我现在想查询每个部门的平均底薪是多少钱,这个就需要对员工记录,按照部门编号去分组了。比如说10部门的员工分成一组,20部门的员工分成另一组,以此类推。根据分组的情况,统计小组内的最大值、最小值、平均值。

2、group by函数

分组的语法是通过group by子句来实现的,它能按照某个字段对记录分组这个字段。值相等的记录就归为一组了。比如说按照deptno字段分组,那么部门编号相同的员工就被编为一组了。

查询每个部门的平均底薪

select
deptno,avg(sal)
from t_emp group by deptno;

3.逐级分组

有的时候仅有大的分组还不够,我们还要在大的分组里边再划分出来小的分组,再执行统计计算。比如说我现在想查看每个部门里边每种职位的人员数量和平均的底薪。首先就要按照部门对员工记录分组的。在部门里边,我们还要按照职务去分组,最后再用select子句里边的聚合函数去统计一下

查询每个部门里,每种职位的人员数量和平均底薪,按照部门编号升序排序

select 
deptno,job,count(*),avg(sal)
from t_emp 
group by deptno,job
order by deptno;

4. 对SELECT 子句的要求

如果查询语句里边含有group by子句,那么select子句里边的内容就必须遵守一个规定:SELECT子句里边可以包括聚合函数或者group by用作分组的字段,其他的内容,是不可以出现在select子句中的。

比如下面这个sql,sal字段不是聚合函数的分组列也不是聚合函数,前面的deptno,count(*),avg(sal)都是只有一个字段,但是sal字段一个部门有好多,就会出现数据匹配的问题,无法准确匹配

select 
deptno,count(*),avg(sal),sal
from t_emp 
group by deptno;

5. 对分组结果集再次做汇总计算

WITH ROLLUP子句

看一下select子句里面写的内容,这个部门编号,部门里边的人数,底薪的平均值、最大值,还有最小值,这个结果集里面前三条记录是按照部门去分组,然后统计每个部门里边的人数,还有是底薪的一些情况,因为使用了 WITH ROLLUP 这样的关键字,这个mysql会对这个结果集里边的这个汇总结果,会再统计一下它的汇总值。

比如说这个count(*),按照部门去分组之后,结果就是3个人、5个人和6个人。那么咱们这个 WITH ROLLUP出现以后,就是对这三个结果再次汇总一下,求一下这个总人数,这个总记录的条数就是14

select 
deptno,count(*),avg(sal),max(sal),min(sal)
from t_emp
group by deptno with rollup;

6. GROUP_CONCAT函数

那么group_concat函数就可以把分组查询中的非分组字段多条记录合并成一条记录。

关于具体用法可以看一下下面的例子

查询每个部门内底薪超过2000元的人数和员工姓名

select deptno,count(*),group_concat(ename)
from t_emp where sal>2000
group by deptno;

7. 各种子句的查询顺序

首先是from子句,然后是where子句来筛选数据符合条件的记录就留下来交由group by子句来分组分完组了,要用select子句中的聚合函数做汇总计算,order by子句对结果排序的,最后交给limit子句来挑选返回哪些分页的数据。

FROM -> WHERE -> GROUP BY -> SELECT -> ORDER BY -> LIMIT

标签:group,4.2,数据库,sal,分组,子句,deptno,select
From: https://blog.csdn.net/sumatray/article/details/144722215

相关文章

  • centos 自动备份mysql数据库
    创建自动备份脚本创建文件mysql_auth_back.sh#!/bin/bash#source/etc/profile#以下配置信息需要根据自己情况进行编辑DB_HOST="127.0.0.1"......
  • 崩溃列表数据库查询(可供参考)
    首先去https://weikezhijia.feishu.cn/sheets/BIvxsKZhHhzpC6tDyoLcPE50n4d?sheet=9ikXjx看库中导出指标,然后可以查到是rum_error表,然后去ors_rum_test服务器,ors_rum_test数据库,rum_error表去查询,结合点击全部按钮后查看F12 然后查看preView里的字段,结合着去查rum_error表,比......
  • 数据库基础
    1、数据库概念一个存储数据的地方数据按照分类存储到不同的表简单的电子表格非常高效快速查询其中的数据2、为什么学习数据库关注页面操作,还需要检查数据库中的数据是否正确出现bug时,能够定位到问题原因造数据,修改数据-测试环境3、数据库类型关系型数......
  • 使用python脚本,批量修改mysql数据库表字段名称
    前提:搭建python相关环境目的:将驼峰式命名或混合大小写的字段名转换为下划线分隔的小写字段名。例如:UserName->user_name,userName->user_name一、新建脚本update_table_column_names.pyimportpymysqlimportreimportsysdefto_snake_case(name):s1......
  • 数据库连接池----DBUtils的使用
      DBUtils是一个用于管理数据库连接池的Python库,它提供了连接池的管理,可以避免每次进行数据库操作时都重新建立连接。通过DBUtils,你可以更高效地管理数据库连接,尤其在高并发的情况下,能够有效减少创建和销毁连接的开销。DBUtils支持多种数据库驱动,包括MySQL、Postgre......
  • Springboot旧衣捐赠平台设计与实现p40x5(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,公益活动,捐赠信息,物品分类,地区分类,捐赠数据,捐赠接收开题报告内容一、研究背景与意义研究背景随着经济的快速发展和消费意识的提高,旧衣物的废弃量不......
  • Springboot旧商品销售系统4104m(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,卖家,商品分类,商品信息开题报告内容一、项目背景与意义随着经济的快速发展和人们消费观念的转变,旧商品市场逐渐兴起。许多消费者开始注重资源的循环利用,......
  • Springboot旧教材交易系统a6151(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,书籍类型,书籍信息开题报告内容一、研究背景随着高等教育的普及和校园生活的丰富多彩,学生们在学习和生活中积累了大量的旧教材。这些旧教材对于个人而言,可......
  • 建站升级后打开错误-虚拟主机/数据库问题
    问题: 升级建站服务后,网站无法正常访问,如何解决?答案: 您在将成品网站从国内升级到香港服务器后遇到网站无法正常访问的问题。根据描述,您提供的虚拟主机名称为jxlxjd,并提供了FTP账号和密码。经核实,此虚拟主机已过期超过30天的数据恢复期,导致网站文件和数据库数据被系统自动删除......
  • 预装织梦,数据库连不上-虚拟主机/数据库问题
    问题: 预装织梦程序后,无法连接数据库,如何解决?答案: 您在预装织梦程序时遇到无法连接数据库的问题。根据描述,您确认输入的数据库账号和密码是正确的,但仍然无法连接。以下是详细的解决方案:检查PHP版本:经测试,切换PHP版本到5.2后问题已经解决。请确保您的虚拟主机环境支持织梦......