使用mysql语句进行分组查询

2023-05-16

使用mysql语句进行分组查询

1 作用

对整个数据表的某几个字段进行分组,然后通过分组函数得到我们想要的结果

2 如何用

2.1 只分一个组

2.1.1 本质

就是根据分组字段把整个表的数据分为几组,然后分别对每组里面的数据进行汇总查询或者计算

2.1.2 语法

SELECT 分组字段,分组函数(汇总结果字段)
FROM 表名
GROUP BY 分组字段;

2.1.3 示例sql语句

 SELECT deptno,max(sal)
 FROM emp
 GROUP BY deptno;
 /*
 查询出emp(员工表)中每个部门中最高薪水是多少
 deptno是部门编号的意思,sal是薪水的意思
 */

2.1.4 分析过程

a 分组

按照deptno字段可以把emp表分为三组(分组是没有先后顺序的,谁是第一组都行)

分组的数据的标题(EMPNO,ENAME…)实际上只是为了看的更清楚,它实际并不参与分组的

第一组 10,对应的数据如下所示
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
7782CLARKMANAGER78391981-06-092450.00NULL10
7839KINGPRESIDENTNULL1981-11-175000.00NULL10
7934MILLERCLERK77821982-01-231300.00NULL10
第二组 20,对应的数据如下所示
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
7369SMITHCLERK79021980-12-17800.00NULL20
7566JONESMANAGER78391981-04-022975.00NULL20
7788SCOTTANALYST75661987-04-193000.00NULL20
7876ADAMSCLERK77881987-05-231100.00NULL20
7902FORDANALYST75661981-12-033000.00NULL20
第三组 30 对应的数据如下所示
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
7499ALLENSALESMAN76981981-02-201600.00300.0030
7521WARDSALESMAN76981981-02-221250.00500.0030
7654MARTINSALESMAN76981981-09-281250.001400.0030
7698BLAKEMANAGER78391981-05-012850.00NULL30
7844TURNERSALESMAN76981981-09-081500.000.0030
7900JAMESCLERK76981981-12-03950.00NULL30
b 找最大值
b.1 第一组 10中的最大值为5000
b.2 第二组 20中的最大值为3000
b.3 第三组 30中的最大值为2850
c 把最大值和对应的分组字段的值作为一个整体进行展示出来
deptnomax(sal)
105000.00
203000.00
302850.00

2.1.5 示例sql语句运行截图

在这里插入图片描述

2.2 分多个组

2.2.1 语法

SELECT 分组字段1,分组字段2....分组字段n,分组函数(汇总结果字段)
FROM 表名
GROUP BY 分组字段1,分组字段2....分组字段n;

2.2.2 本质

根据分组字段1进行分组,在分好的组里面再用分组字段2进行分组,得到相应的组,然后在相应的组里面再根据分组字段3再一次分组,然后后面就依此类推了

结论:后一个分组字段都是根据前一个分组字段分好的组里面进行再次分组的,其中第一个分组字段是根据整个数据表中的所有数据行进行分组的**,可以粗略理解成第一个分组字段的前一个分组字段分好后的结果就是一组,该组包含数据表中是所有数据行**(默认不写分组的结果就是把表中所有数据行当成一组)

2.1.3 示例sql语句

SELECT deptno,job,max(sal)
FROM emp
GROUP BY deptno,job;
 /*
 查询出emp(员工表)中每个部门中每种职位的最高工资
 deptno是部门编号的意思,sal是薪水的意思
 */

2.1.4 分析过程

a 第一次分组

按照deptno字段可以把emp表分为三组,分组的数据的标题(EMPNO,ENAME…)实际上只是为了看的更清楚,它实际并不参与分组的

第一组 10,对应的数据如下所示
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
7782CLARKMANAGER78391981-06-092450.00NULL10
7839KINGPRESIDENTNULL1981-11-175000.00NULL10
7934MILLERCLERK77821982-01-231300.00NULL10
第二组 20,对应的数据如下所示
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
7369SMITHCLERK79021980-12-17800.00NULL20
7566JONESMANAGER78391981-04-022975.00NULL20
7788SCOTTANALYST75661987-04-193000.00NULL20
7876ADAMSCLERK77881987-05-231100.00NULL20
7902FORDANALYST75661981-12-033000.00NULL20
第三组 30 对应的数据如下所示
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
7499ALLENSALESMAN76981981-02-201600.00300.0030
7521WARDSALESMAN76981981-02-221250.00500.0030
7654MARTINSALESMAN76981981-09-281250.001400.0030
7698BLAKEMANAGER78391981-05-012850.00NULL30
7844TURNERSALESMAN76981981-09-081500.000.0030
7900JAMESCLERK76981981-12-03950.00NULL30
b 第二次分组

在第一次分好的组的基础上,按照job(职位)的不同进行再次分组

b.1 部门编号为10的组 再次分组的结果如下所示

b.1.1 MANAGER组

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
7782CLARKMANAGER78391981-06-092450.00NULL10

b.1.2 PRESIDENT组

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
7839KINGPRESIDENTNULL1981-11-175000.00NULL10

b.1.3 CLERK组

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
7934MILLERCLERK77821982-01-231300.00NULL10
b.2 部门编号为20的组 再次分组的结果如下所示

b.2.1 ANALYST组

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
7788SCOTTANALYST75661987-04-193000.00NULL20
7902FORDANALYST75661981-12-033000.00NULL20

b.2.2 CLERK组

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
7876ADAMSCLERK77881987-05-231100.00NULL20
7369SMITHCLERK79021980-12-17800.00NULL20

b.2.3 MANAGER组

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
7566JONESMANAGER78391981-04-022975.00NULL20
b.3 部门编号为30的组 再次分组的结果如下所示

b.3.1 CLERK组

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
7900JAMESCLERK76981981-12-03950.00NULL30

b.3.2 MANAGER组

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
7698BLAKEMANAGER78391981-05-012850.00NULL30

b.3.3 SALESMAN组

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
7499ALLENSALESMAN76981981-02-201600.00300.0030
7844TURNERSALESMAN76981981-09-081500.000.0030
7521WARDSALESMAN76981981-02-221250.00500.0030
7654MARTINSALESMAN76981981-09-281250.001400.0030
c 找每个部门中每个岗位的最大薪水值
c.1 部门编号为10的部门中

CLERK职位的最高薪水为1300

MANAGER职位的最高薪水是2450

PRESIDENT职位的最高薪水是5000

c.2 部门编号为20的部门中

CLERK职位的最高薪水为1100

MANAGER职位的最高薪水是2975

ANALYST职位的最高薪水是3000

c.2 部门编号为20的部门中

CLERK职位的最高薪水为950

MANAGER职位的最高薪水是2850

SALESMAN职位的最高薪水是1600

d 根据最大值和具体的几个分组字段作为一个整体展示出来
deptnojobmax(sal)
10CLERK1300.00
10MANAGER2450.00
10PRESIDENT5000.00
20ANALYST3000.00
20CLERK1100.00
20MANAGER2975.00
30CLERK950.00
30MANAGER2850.00
30SALESMAN1600.00

2.1.5 示例sql语句运行截图

在这里插入图片描述

3 注意点

3.1 分组的字段有null值,会把该字段所有的null值看成一组

3.1.1 示例sql语句

SELECT product_type
FROM product
GROUP BY product_type;

3.1.2 示例sql语句运行截图

在这里插入图片描述

3.2 当有GROUP BY子句时,SELECT子句中只能出现分组字段和分组函数,不能出现非分组字段

3.2.1 分析

因为分组字段进行分组想要查询出来的数据行一般是比原表小的,而SELECT中有非分组字段,非分组字段的数据行是与原表一致,可以明显看出此时非分组字段比分组字段的结果要多了,查询时,就会随机一个非分组字段与分组字段进行匹配,那么这样一来就得不到我们想要的结果了

3.2.2 错误示例sql语句

SELECT product_name,count(product_type) '数量'
FROM product
GROUP BY product_type;

3.2.3 错误示例sql语句运行截图

在这里插入图片描述

3.3 GROUP BY子句中不能出现SELECT子句中的别名

3.2.1 分析

GROUP BY子句的执行顺序永远在SELECT 子句之前,在执行GROUP BY子句的时候,你都没有执行SELECT子句,那么哪里会有SELECT子句中的别名给你用呢?要先存在才能用嘛!!!

3.2.2 错误示例sql语句

SELECT product_type '商品种类'
FROM product
GROUP BY '商品种类';

3.2.3 错误示例sql语句运行截图

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用mysql语句进行分组查询 的相关文章

  • MySQL - 从数字列表中选择在表的 id 字段中没有对应项的数字

    我有一个数字列表 例如 2 4 5 6 7 我有一个表 foos 带有 foos ID 包括 1 2 3 4 8 9 我想获取我的号码列表 并在我的表的 ID 字段中找到那些没有对应项的号码 实现此目的的一种方法是创建一个表格栏 在 ID
  • 如何从表中检索特定列 --- JPA 或 CrudRepository?我只想从用户表中检索电子邮件列

    用户模型 Entity Table name user uniqueConstraints UniqueConstraint columnNames email public class User implements Serializab
  • MySQL:如何仅获取正值的平均值?

    假设我有 INT 列 并且我使用 1 来表示插入时没有可用数据 我想获得该列中所有 0 或更大值的平均值 这可能吗 Thanks 我忘了提及 我正在与其他 AVG 一起执行此操作 因此从选项卡中选择 avg a avg b avg d 所以
  • 针对约 225 万行的单表选择查询的优化技术?

    我有一个在 InnoDB 引擎上运行的 MySQL 表 名为squares大约有 2 250 000 行 表结构如下 squares square id int 7 unsigned NOT NULL ref coord lat doubl
  • 休眠以持久保存日期

    有没有办法告诉 Hibernate java util Date 应该持久保存 我需要这个来解决 MySQL 中缺少的毫秒分辨率问题 您能想到这种方法有什么缺点吗 您可以自己创建字段long 或者使用自定义的UserType 实施后User
  • 来自数据库的 jfreechart 散点图

    如何使用java中的jfreechart绘制mysql数据库表中数据的散点图 我使用过 Swing 库 任何链接都会有帮助 我搜索了谷歌但找不到理解的解决方案 如果您有代码 请提供给我 实际上我确实做了条形图并使用 jfreechart 绘
  • MYSQL:如何在同一查询中联接两个表,两次引用同一个表

    我有两张桌子 我正在尝试将下面的示例两个表与表 1 引用表 2 两次结合起来 例如 如果我查看表 1 组 2 和成员 7 它应该查找表 2 中的 ID 并给出输出 Group Members Name Name 2 7 Blue Dog T
  • 使用函数的 SQL 查询 - 如何获取列表的最大计数

    如何查询 MAXIMUM COUNT 交易次数 我的代码如下 SELECT customer id COUNT customer id FROM rental GROUP BY customer id HAVING MAX COUNT cu
  • 使用 PHP 将 latin1_swedish_ci 转换为 utf8

    我有一个数据库 里面充满了类似的值 Dhaka 应该是 Dhaka 因为我在创建数据库时没有指定排序规则 现在我想修复它 我无法从最初获取数据的地方再次获取数据 所以我在想是否可以在 php 脚本中获取数据并将其转换为正确的字符 我已将数据
  • MySQL存储过程变量作为表名连接

    我想在存储过程中执行以下查询而不准备查询 因为这给我带来了 OUT 传回参数的问题 DELIMITER CREATE PROCEDURE Test IN CID BIGINT 20 IN IDs LONGTEXT BEGIN EXECUTE
  • MySQL 中的创建/写入权限

    我的设备遇到一些权限问题SELECT INTO OUTFILE陈述 当我登录数据库并执行简单的导出命令时 例如 mysql gt select from XYZ into outfile home mropa Photos Desktop
  • 'numpy.float64'对象没有属性'translate'在Python中将值插入Mysql

    import dataset db dataset connect table db 当我尝试向 Mysql 表中插入一些值时 发生了此错误 我插入表中的示例值 print Buy ticker price date OType OSize
  • mysql 详细查询字符串,如通配符

    不知道如何标题我的问题 哈哈 下面是我需要的 我的数据库中的值如下所示 test example 1 test example 2 test example TD 1 这些值的长度可以不同 test example 只是一个示例 某些值将具
  • PHP 和 MySQL 的重音字符错误

    我的问题是 直接通过 PHP 编写的内容是正确重音的 但是当重音单词来自 MySQL 时 字母会像这样 我尝试使用html charset as ISO 8859 1它修复了 MySQL 字母 但破坏了其他字母 解决这一切的一种方法是设置我
  • 如何使用php在mysql数据库中添加照片? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我对 PH
  • PHP多图像文件上传并存储到文件夹和数据库

    我正在建立一个网站 向夜间狂欢者展示大城市夜总会场所和活动的列表 我正在尝试构建一个后端页面 管理员可以在其中添加俱乐部并输入信息 例如机构名称 位置 相对价格等 当然还有俱乐部的一些图像 每个俱乐部必须至少有一张图像 即主图像 可以有额外
  • ODBC 链接表中突然开始出现写入冲突消息

    我有一个 mySQL 数据库 用于跟踪我们的项目并驱动我们的网站显示其信息 为了方便更新数据库 我设置了一个使用 ODBC 连接 MySQL ODBC 5 1 来编辑数据的访问数据库 过去几个月一直运行良好 没有出现任何问题 然而 昨晚用户
  • 数据读取过程中遇到致命错误

    我正在进行定期更新表扫描 Using connect1 As New MySqlConnection ConnectLocalhost serverString connect1 Open Dim cmd New MySqlCommand
  • Mac OSX 10.6 上的 Python mysqldb 不工作

    我正在使用 Python 2 7 并尝试让 Django 项目在 MySQL 后端运行 我已经下载了 mysqldb 并按照此处的指南进行操作 http cd34 com blog programming python mysql pyth
  • MYSQL 按喜欢/不喜欢和受欢迎程度排序

    我有评论表 其中包括喜欢和不喜欢的内容 现在我在正确的顺序上遇到了问题 实际上 我的系统在顶部显示了最多点赞的评论 我正在 youtube 上寻找类似系统的东西 这意味着 100like 100dislikes 的评论的顺序高于 1 1 我

随机推荐

  • 实战microPython(二)时钟和日历的使用

    实战microPython 2 时钟和日历的使用 David Zou 创客DIY乐园 对于一名创客 xff0c 自制一个个性化的时钟或闹钟啥的 xff0c 应该是比较常见的入门级任务了 通常我们制作时钟或闹钟的时候 xff0c 都需要借助专
  • 实战microPython(10)-蓝牙模块的使用

    实战microPython 10 蓝牙模块的使用 David Zou 2018 12 27 本文讲解蓝牙模块的使用 xff0c 以及通过uPyBoard来操作蓝牙模块并实现手机和uPyboard互动 正在学习和使用uPyBoard开发的小伙
  • nohup: failed to run command ‘java’: No such file or directory解决方案

    场景 xff1a Jekins实现自动化部署 问题描述 Jekins打包后端项目后发送Jar到对应的应用服务器 xff0c 通过应用服务器Shell脚本启动服务报错 nohup span class token operator span
  • System.DllNotFoundException: 无法加载DLL

    问题描述 使用VS2005在Windows Server 2003上编译C 43 43 代码 输出dll文件 把该dll放到运行机器 与编译机器的系统完全一致 上 供C 代码 web前台 调用 提示无法加载dll 分析 1 路径完全没有问题
  • Flutter学习(一)

    开始学习 为什么使用 Fultter xff1f 为什么使用 Fultter xff1f 言归正传 xff0c 亘古不变环境搭建 xff1a Android Studio 下载 xff0c 我的是这个版本 xff0c emmmm 首先安装g
  • 树莓派 ubuntu18.04 mate更换为国内镜像源

    文章目录 前言正文参考 前言 我使用树莓派3B 43 xff0c 烧写的操作系统为ubuntu mate18 04 网上的相关教程很多 xff0c 但说的很详细的不多 xff0c 本文算是做一个简单的整理 树莓派采用的是arm架构 xff0
  • Spring常见面试题总结(超详细回答)

    1 Spring是什么 Spring是一个轻量级的IoC和AOP容器框架 是为Java应用程序提供基础性服务的一套框架 xff0c 目的是用于简化企业应用程序的开发 xff0c 它使得开发者只需要关心业务需求 主要包括以下七个模块 xff1
  • 在android studio中使用kotlin

    一 安装kotlin插件 二 导入Kotlin的核心库及其扩展库Anko库 1 在项目根目录下的build gradle文件中指定kotlin插件的版本及路径 buildscript ext kotlin version 61 span c
  • sublime Text SFTP LICENSE 注册码

    34 email 34 34 xiaosong 64 xiaosong me 34 34 product key 34 34 d419f6 de89e9 0aae59 2acea1 07f92a 34 这个就是SFTP注册码 将上面的代码复
  • Aliddns插件使用:小白超详细图文教程

    Aliddns插件使用 xff1a 小白超详细图文教程 Aliddns插件 xff0c 用阿里的云解析速度是快 xff0c 天下武功为快不破 作为一个小白的我 xff0c 看这篇帖子也是一脸懵逼 xff0c http koolshare c
  • 在PyQt5中使用多进程(multiprocessing)

    multiprocessing对象要放在 main 所在的启动文件使用槽连接multiprocessing对象 import sys from multiprocessing import Pool from PyQt5 QtWidgets
  • go使用exec执行命令

    golang exec 命令执行
  • 【汇编】AT89C52点亮一盏LED灯(汇编语言)

    学习利用汇编语言写单片机程序的第一步是要学习汇编语言的相关理论知识 xff0c 那么实践操作的第一步肯定是从点灯开始啦 xff01 编译环境 xff1a keil4 编译语言 xff1a 汇编语言 内容 xff1a 一 keil4建立AT8
  • wsl-常见问题

    基于wsl2的docker如何迁移镜像文件 默认基于wsl2的docker desktop的镜像是有wsl2管理的 xff0c 而wsl2一般在c盘 当下载的镜像多了之后 xff0c 就会把C盘爆满 wsl shutdown wsl exp
  • 求0-7所组成的奇数个数

    include lt stdio h gt include lt stdlib h gt main long sum 61 4 long s 61 4 int j for j 61 2 j lt 61 8 j 43 43 printf 34
  • UITabBarController详解

    一 UITabBarController简介 一 继承关系 UITabBarController和UINavigationController类似 xff0c 也继承于UIViewController xff0c 也可以轻松地管理多个控制器
  • 关于多卡Android设备获取手机号的研究

    首先我们都知道如何获取Android手机的Sim手机号 fun getNativePhoneNumber context Context String val tm 61 context getSystemService Context T
  • 【入门学习三】基于 FPGA 使用 Verilog 实现按键状态机代码及原理讲解

    目录 一 状态机二 模块设计三 代码实现四 管脚配置及结果展示 上一篇博文 xff1a 入门学习二 基于 FPGA 使用 Verilog 实现蜂鸣器响动的代码及原理讲解 概述 xff1a 前面的两篇文章 xff0c 其中按键模块采用的是延时
  • 【二分】洛谷_3902 递增

    题意 给出n个数 xff0c 求出修改最少的数字 xff0c 使得数列严格单调递增 思路 我们用一个数组s来记录当前存到的数字 xff0c 每次放进一个数字 xff0c 我们就判断它是不是比之前的数小 xff0c 否则我们就二分找到一个最好
  • 使用mysql语句进行分组查询

    使用mysql语句进行分组查询 1 作用 对整个数据表的某几个字段进行分组 然后通过分组函数得到我们想要的结果 2 如何用 2 1 只分一个组 2 1 1 本质 就是根据分组字段把整个表的数据分为几组 然后分别对每组里面的数据进行汇总查询或