02-分组查询group by和having的使用

news2024/11/28 19:35:36

分组查询

MySQL中默认是对整张表的数据进行操作即整张表为一组, 如果想对每一组的数据进行操作,这个时候我们需要使用分组查询

分组函数的执行顺序: 先根据where条件筛选数据,然后对查询到的数据进行分组,最后也可以采用having关键字过滤取得正确的数据

group by子句

在一条select语句当中若有group by关键字,那么在select语句后面只能跟分组函数和参与分组的字段,其它的一律不能跟否则毫无意义

  • 如果跟其他的字段,在MySQL数据库中虽然可以执行但是毫无意义,在Oracle数据库中执行就会报错,因为Oracle的语法比MySQL的语法严格

分组函数的依据可以是一个字段多个字段联合成一个字段(使用逗号隔开),只要满足分组的依据即一个或多个字段的值都相同时才算一组

按照工作岗位分组: 查询每个工作岗位的工资合计,要求显示岗位名称和工资合计

select job, sum(sal) from emp group by job;

按照工作岗位和部门编码分组: 查询每个工作岗位的每个部门的工资合计

# 部门编号和工作岗位联合起来看成一个字段分组,只要二者都相同时才算一个分组
select job,deptno,sum(sal) from emp group by job,deptno;

在这里插入图片描述

计算每个岗位的平均薪资,要求显示除MANAGER岗位之外平均薪资大于1500的岗位且按照平均薪资降序排列

select 
	job, avg(sal) as avgsal
from
	emp
where
	job <> 'MANAGER'
group by
	job 
having
	avg(sal) > 1500 
order by
	--注意 avgsal 之所以能用的原因 是先执行select后已经为avg(sal) 起了别名 , 所以再执行 order by 的时候当然也可以用
	avgsal desc; 

where和having子句

分完组后若没有达到要求,可以使用having关键字对分完组之后的数据进一步过滤

  • having不能单独使用, 不能代替where, 必须和group by联合使用

where和having的应用: 能在where中过滤的数据优先选择在where中过滤,where完成不了的再选择having,having的过滤是专门对分组之后的数据进行过滤的

先分组再筛选(不推荐): 找出每个部门最高薪资大于3000的员工,先分组会把那些不符合条件的数据也进行分组会导致sql语句执行效率比较低

select 
	deptno,max(sal) 
from 
	emp 
group by 
	deptno
having
	max(sal) > 3000;

先筛选再分组(推荐): 找出每个部门最高薪资大于3000的员工, 先将符合条件的员工找出来然后再分组执行效率高

select 
	deptno,max(sal) 
from 
	emp 
where
	sal > 3000	
group by 
	deptno

having的应用: 查询每个部门的平均薪资,要求显示平均薪资高于2500的

select 
	deptno,avg(sal) 
from 
	emp 
group by 
	deptno
having
	avg(sal) > 2500;  

一个完整的 select 语句

select 语句的执行顺序

select --> (5)查询数据
	字段 
from ---> (1)确定某张表
	表名 
where --->(2)经过where条件从原始数据筛选出有价值的数据
	……
group by --->(3)对这些有价值的数据进行分组
	……
having -->(4)分组之后可以使用having继续筛选,having关键字不可以单独出现
	……
order by -->(6)对查询到的数据排序输出
	……
limit -->(7) 分页显示查询到的数据
	……

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1318487.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FME之FeatureReader转换器按表格内容读取矢量数据

问题&#xff1a;平时会遇到只用某个大数据里某小部分数据参与下一步数据处理&#xff0c;此时我们会用到FeatureReader转换器&#xff0c;一般是通过空间关系&#xff08;相交、包含&#xff09;来读取相应涉及的图斑矢量&#xff0c;但就有一个问题&#xff0c;加入你的启动器…

JS中浅拷贝和深拷贝

本篇文章咱们一起来学习下JS中的浅拷贝和深拷贝&#xff0c;了解它们在内存上的区别&#xff0c;并掌握浅拷贝和深拷贝的常用实现方法。 引用赋值 在学习拷贝之前&#xff0c;咱们先来看一个常见的情景&#xff0c;如下图&#xff1a; 大家觉得这是深拷贝还是浅拷贝&#xff0…

ensp创建配置环境,实现全网互访

文章目录 创建配置环境&#xff0c;实现全网互访配置步骤接入层交换机&#xff08;sw4、sw5&#xff09;划分vlan汇聚层交换机&#xff08;sw2、sw3&#xff09;配置ip地址作为vlan网关、与sw1 ip地址直连核心层交换机&#xff08;sw1&#xff09;配置ip地址与汇聚层交换机&…

计算机网络:数据链路层(VLAN)

今天又学到一个知识&#xff0c;加油&#xff01; 目录 一、传统局域网的局限&#xff08;促进VLAN的诞生&#xff09; 二、VLAN简介 三、VLAN的实现 总结 一、传统局域网的局限&#xff08;促进VLAN的诞生&#xff09; 缺乏流量隔离:即使把组流量局域化道一个单一交换机中…

Java小案例-RocketMQ的11种消息类型,你知道几种?(请求应答消息)

前言 Rocket的请求应答消息是指在使用Rocket&#xff08;这里可能是RocketMQ或者Rocket框架&#xff09;进行通信时&#xff0c;客户端发送一个请求到服务端&#xff0c;然后服务端处理该请求并返回一个响应的过程中的数据交换。 在RocketMQ中&#xff1a; 请求应答消息通常…

MySQL性能测试(完整版)

MySQL性能测试之SysBench 一、SysBench安装 1、mac安装命令&#xff1a;&#xff08;其他系统安装对应的命令即可&#xff0c;不影响后面的使用&#xff09; brew install sysbench2、查看是否安装成功&#xff1b; sysbench --version附&#xff1a; &#xff08;1&#x…

The Grid – Responsive WordPress Grid响应式网格插件

点击阅读The Grid – Responsive WordPress Grid响应式网格插件原文 The Grid – Responsive WordPress Grid响应式网格插件是一个高级 wordpress 网格插件&#xff0c;它允许您在完全可定制且响应迅速的网格系统中展示任何自定义帖子类型。 Grid WordPress 非常适合展示您的博…

runCatching异常捕获onSuccess/onFailure返回函数,Kotlin

runCatching异常捕获onSuccess/onFailure返回函数&#xff0c;Kotlin fun test(a: Int, b: Int) {runCatching {a / b}.onSuccess {println("onSuccess: $it")return ok(it)}.onFailure {println("onFailure: $it")return fail(it)} }fun ok(o: Any) {prin…

QT第一步

文章目录 软件下载软件安装QT的程序组新建项目 软件下载 qt下载网址&#xff1a;https://download.qt.io/archive/qt/   关于版本&#xff1a;     我选择的版本是5.14.2&#xff0c;这个版本是最后的二进制安装包的版本&#xff0c;在往后的版本就需要在线安装了。并且5…

常用网安渗透工具及命令(扫目录、解密爆破、漏洞信息搜索)

目录 dirsearch&#xff1a; dirmap&#xff1a; 输入目标 文件读取 ciphey&#xff08;很强的一个自动解密工具&#xff09;&#xff1a; john(破解密码)&#xff1a; whatweb指纹识别&#xff1a; searchsploit&#xff1a; 例1&#xff1a; 例2&#xff1a; 例3&…

QT5 CMake进行开发

配置环境 因为是使用CMake进行开发&#xff0c;所以推荐使用的QT版本是 5.14.2。因为楼主有 vs2015的环境&#xff0c;所以在安装QT时选择的是 msvc 2015 64bit msvc 2017 32bit 勾选了所有需要的模块。kit配置如下 图中画框的地方是比较关键的地方&#xff0c;1. 指定编译器…

3. cgal 示例 GIS (Geographic Information System)

GIS (Geographic Information System) 地理信息系统 原文地址: https://doc.cgal.org/latest/Manual/tuto_gis.html GIS 应用中使用的许多传感器&#xff08;例如激光雷达&#xff09;都会生成密集的点云。此类应用程序通常利用更先进的数据结构&#xff1a;例如&#xff0c;不…

【STM32】STM32学习笔记-对射式红外传感器计次 旋转编码器计次(12)

00. 目录 文章目录 00. 目录01. NVIC相关函数1.1 NVIC_PriorityGroupConfig函数1.2 NVIC_PriorityGroup类型1.3 NVIC_Init函数1.4 NVIC_InitTypeDef类型 02. 外部中断相关API2.1 GPIO_EXTILineConfig2.2 EXTI_Init2.3 EXTI_GetITStatus2.4 EXTI_ClearITPendingBit2.5 中断回调函…

一篇文章了解Flutter Json系列化和反序列化

目录 一. 使用dart:convert实现JSON格式编解码1. 生成数据模型类2. 将JSON数据转化成数据模型类3. 数据模型类转化成JSON字符串 二、借助json_serializable实现Json编解码1.添加json_annotation、build_runner、json_serializable依赖2. 创建一个数据模型类3. 使用命令行生成JS…

【XR806开发板试用】+ 通过网络控制led并上报按键状态

通过网络控制led并上报按键状态 本次做一个手机通过mqtt服务器控制板子上的LED亮灭&#xff0c;板子也可以将按钮状态变化通过mqtt服务器上报给手机的功能 硬件上&#xff0c;从原理图看&#xff0c;LED接到了PA21&#xff0c;高电平点亮。 按键则时接到了PA11&#xff0c;并…

kali虚拟机无网络

1.查看虚拟机的网卡模式 在虚拟机设置里&#xff0c;一般选择桥接模式&#xff0c;也可以选择NAT模式。 2、你的IP地址是否写死了&#xff08;设置为静态IP&#xff09; vim编辑模式下的命令&#xff1a; 按a或i进入编辑模式&#xff0c;然后按esc键退出编辑模式&#xff0c;s…

多条件三元表达式如何写?

在某些业务需求情况下&#xff0c;如何书写多条件三元表达式&#xff1f;&#xff08;例如&#xff0c;父组件传值给子组件&#xff0c;子组件根据不同的值去响应不同的颜色变化该如何实现&#xff1f;&#xff09; 父组件&#xff1a; 父组件传testData的值给子组件&#xff…

diffuser库之 Load pipelines, models, and schedulers 的阅读记录

加载不同pipeline safe checker pipeline转换 加载模型配置 远程库与本地库使用区别 本地库必须引入variant参数用于选择加载哪一种模型 保存模型 修改pipeline的scheduler pipeline class以及各个子模块的定义

保护性地编写readObject方法

在Java中&#xff0c;通过谨慎保护性地编写 readObject 方法&#xff0c;我们可以在对象反序列化的过程中加入额外的安全检查和验证&#xff0c;以确保反序列化后的对象的状态是合法和安全的。以下是一个简单的例子&#xff0c;演示如何保护性地编写 readObject 方法&#xff1…

表格el-tooltip和show-overflow-tooltip衝突

表格el-tooltip和show-overflow-tooltip衝突&#xff1a; 二、产品需要实现的效果如下 三、解决文案 1、HTML代码 <el-table:data"tableData"header-row-class-name"custom-table-header"header-cell-class-name"custom-table-header-cell"…