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

分组查询

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) 分页显示查询到的数据
	……

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【STM32】STM32学习笔记-EXTI外部中断(11)

00. 目录 文章目录 00. 目录01. 中断系统02. 中断执行流程03. STM32中断04. NVIC基本结构05. NVIC优先级分组06. EXTI简介07. EXTI基本结构08. AFIO复用IO口09. EXTI框图10. 计数器模块11. 旋转编码器简介12. 附录 01. 中断系统 中断&#xff1a;在主程序运行过程中&#xff0…

easy贪吃蛇

之前承诺给出一个贪吃蛇项目。 1.EasyX库认知 有关EasyX库的相关信息&#xff0c;您可以看一下官方的文档&#xff1a;EasyX官方文档。 这里我做几点总结&#xff1a; EasyX库就和名字一样&#xff0c;可以让用户调用一些简单的函数来绘制图像和几何图形利用EasyX库可以制作…

ES6 面试题 | 15.精选 ES6 面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

知识付费平台选择指南:如何找到最适合你的学习平台?

在当今的知识付费市场中&#xff0c;用户面临的选择越来越多&#xff0c;如何从众多知识付费平台中正确选择属于自己的平台呢&#xff1f;下面&#xff0c;我们将为您介绍我有才知识付费平台相比同行的优势&#xff0c;帮助您做出明智的选择。 一、创新的技术架构&#xff0c;…

3.3【窗口】窗口的几何形状(二,窗口属性)

写在前面 应用程序使用窗口来显示内容。一些属性决定了窗口及其内容的大小和位置。其他属性决定了窗口内容的外观和解释。 了解窗口属性引用的两个坐标系非常重要。如果你知道你正在使用的坐标系,那么为你的窗口属性选择设置值会容易得多,并且会更有意义。 一,显示相关属…

【CMU 15-445】Lecture 11: Joins Algorithms 学习笔记

Joins Algorithms Nested Loop JoinNaive Nested Loop JoinBLock Nested Loop JoinIndex Nested Loop Join Sort-Merge JoinHash JoinBasic Hash JoinPartitioned Hash Join Conclusion 本节课主要介绍的是数据库系统中的一些Join算法 Nested Loop Join Naive Nested Loop Joi…

华媒舍:打造出色科普文章的10步路透社发稿手册

1.科普文章的编写是一项让科技知识更为浅显易懂重要工作。下面我们就详细介绍路透社的发稿手册&#xff0c;带来了好用的流程&#xff0c;协助作者从零开始创作出色的科普文章。 2.明确主题风格在创作科普文章以前&#xff0c;首先要明确要介绍的主题风格。选择一个有趣且适合…

verilog语法进阶,时钟原语

概述&#xff1a; 内容 1. 时钟缓冲 2. 输入时钟缓冲 3. ODDR2作为输出时钟缓冲 1. 输入时钟缓冲 BUFGP verilog c代码&#xff0c;clk作为触发器的边沿触发&#xff0c;会自动将clk综合成时钟信号。 module primitive1(input clk,input a,output reg y); always (posed…

【C++11特性篇】探究【右值引用(移动语义)】是如何大大提高效率?——对比【拷贝构造&左值引用】

前言 大家好吖&#xff0c;欢迎来到 YY 滴C11系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一.【左值&左值引用】和【右值&a…

Leetcode 删除有序数组中的重复项

给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成 示例 1&#xff1a; 输入&…

超声波清洗机哪个好?怎么样挑选清洗力比较强超声波清洗机

大部分的年轻人&#xff0c;现在因为各种原因&#xff0c;戴眼镜的人群不再是局限于学生&#xff0c;很多打工族或者是老人也戴上了眼镜&#xff0c;近视眼或者是老花眼都有。戴眼镜的人群越来越多&#xff0c;会有很多人忽视眼镜清洗这个事情&#xff0c;眼镜长时间不清洗的话…

多层记忆增强外观-运动对齐框架用于视频异常检测 论文阅读

MULTI-LEVEL MEMORY-AUGMENTED APPEARANCE-MOTION CORRESPONDENCE FRAMEWORK FOR VIDEO ANOMALY DETECTION 论文阅读 摘要1.介绍2.方法2.1外观和运动对其建模2.2.记忆引导抑制模块2.3. Training Loss2.4. Anomaly Detection 3.实验与结果4.结论 论文标题&#xff1a;MULTI-LEVE…

云渲染技术下的虚拟现实:技术探索与革新思考

虚拟现实&#xff08;含增强现实、混合现实&#xff09;是新一代信息技术的重要前沿方向&#xff0c;是数字经济的重大前瞻领域&#xff0c;将深刻改变人类的生产生活方式&#xff0c;产业发展战略窗口期已然形成。但是虚拟现实想要深入改变影响我们的生活&#xff0c;以下技术…

PyQt6 QToolBar工具栏控件

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计44条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

【QT】时间日期与定时器

目录 1.时间日期相关的类 2.日期时间数据与字符串之间的转换 2.1 时间、日期编辑器属性设置 2.2 日期时间数据的获取与转换为字符串 2.3 字符串转换为日期时间 3.QCaIendarWidget日历组件 3.1基本属性 3.2 公共函数 3.3 信号 4.实例程序演示时间日期与定时器的使用 …

Linux c++开发-06-使用Linux API 进行文件的读写

先简单的介绍一下open,read,write 先用open接口去打开文件&#xff0c;flag表示打开文件的权限不同。 int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);示例 结果&#xff1a;

学习MS Dynamics AX 2012编程开发 2. X++语言

X是用于构建Dynamics AX功能的编程语言。X是一种与C类似的面向对象编程语言。 完成本章后&#xff0c;您将能够理解X语言&#xff1b;您将知道可用的数据类型是什么&#xff0c;如何创建各种循环&#xff0c;如何比较和操作变量&#xff0c;在哪里可以找到预定义的函数&#x…

TypeScript编译环境配置

TypeScript 安装和配置 全局安装TypeScript语言的编辑器npm i -g typescript用vscode打开项目文件夹&#xff0c;右键选择在终端中打开&#xff0c;在终端中输入tsc -int // tsc是ts语言的编译器&#xff0c;c是compile的意思 &#xff0c;编译结果&#xff1a;在当前项目文件…

Java与前端:风云变幻的技术之路

前言 近日&#xff0c;有关“Java已死、前端已凉”的言论在IT圈内流传甚广&#xff0c;引起了广泛关注和讨论。这究竟是真相还是一场对技术人员的焦虑贩卖呢&#xff1f;让我们一同探讨这场技术风暴带来的变化与机遇&#xff0c;并分享一些实用的建议。 一、技术变革的常态 …

【微服务】Spring Aop原理深入解析

目录 一、前言 二、aop概述 2.1 什么是AOP 2.2 AOP中的一些概念 2.2.1 aop通知类型 2.3 AOP实现原理 2.3.1 aop中的代理实现 2.4 静态代理与动态代理 2.4.1 静态代理实现 三、 jdk动态代理与cglib代理 3.1 jdk动态代理 3.1.1 jdk代理示例 3.1.2 jdk动态代理模拟实现…