当前位置: 首页 > news >正文

SQL-分组查询

 🎉欢迎您来到我的MySQL基础复习专栏

☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹
✨博客主页:小小恶斯法克的博客
🎈该系列文章专栏:重拾MySQL
🍹文章作者技术和水平很有限,如果文中出现错误,希望大家能指正🙏
📜 感谢大家的关注! ❤️

目录

DQL-分组查询

分组查询注意事项:

DQL- 排序查询


DQL-分组查询

语法

注意:括号中的语句是可选的!

SELECT 字段列表  FROM	表名 [ WHERE	条件 ] GROUP BY 分组字段名 [ HAVING 分组后过滤条件 ];

在做题之前,大家可以发现这条语句中,有两个地方是指定条件的,一个是where之后的条件,一个是having之后的条件,那么肯定有疑问,where和having之间到底有什么区别?

where与having区别

1.执行时机不同:where是分组之前进行过滤,不满足where条件,则不参与分组;而having是分组之后对结果进行过滤。

2.判断条件不同:where不能对聚合函数进行判断,而having中可以。

 案例:

1.根据性别分组 , 统计男性员工 和 女性员工的数量

首先,我们先写下基础查询的语法

select * from emp group by gender ;

1.因为我们根据性别分组,所以后面跟的分组的字段名是gender

2.分组我们知道,我们通常配合着聚合函数来操作,因为having中是可以使用聚合函数进行判断的

3.本题需要统计男性员工和女性员工的数量,此时要统计数量,那么我们要用的聚合函数是count还是sum?这里要统计的是数量,所以我们选用count,因此我们需要讲聚合函数加入进去,这里回顾一下聚合函数的语法

select 聚合函数(字段列表) from 表名 ;

4.于是在这里需要写入count(*),对分组的男性员工与女性员工进行统计

select count(*) from emp group by gender ;

此时结果如下:

f8106d2a66d54d92a1bf42a7ee892545.png

此时不是很明了,因为我们并不知道到底男性是7还是女性是7?因此我们可以在查询的时候把gender也查询出来,查询多个字段的语法我们回顾一下:

select 字段1,字段2,字段3 ..... from  表名 ;

于是我们在count(*)之前再加入gender字段,需要将gender查询出来,代码如下:

select gender, count(*) from emp group by gender ;

执行结果如下:

eea6710e229f4c2abd77258bcbffc5d2.png

注意!如果gender写在count(*)的后面则查询的结果gender字段就在count(*)后面,执行如下图:

e15a90af31e641809e5b4ffffaeb5b98.png

2.根据性别分组 , 统计男性员工 和 女性员工的平均年龄

参照上一案例的思路的话,直接将统计数量的count函数改为平均值avg函数再在括号里将age字段给入即可

select gender, avg(age) from emp group by gender ;

执行结果如下:

 1a1f11e721c94fb59b89cfc7a8163f07.png

3.查询年龄小于35的员工 , 并根据工作地址分组 , 获取员工数量大于等于3的工作地址

我们是思路是可以一步一步来完善这些条件,那么第一步先查询出年龄小于35岁的员工

select * from emp where age<35 ;

然后根据工作地址进行分组,那么就是加入group by

select * from emp where age<35 group by workaddress ;

再然后获取员工数量大于等于3的工作地址,要求取员工的数量,所以*此时应该变为一个count(*),注意,肯定有人会疑惑怎么能用count(*)?大家要明白分组时会执行聚合,也就是说age<35的员工分成不同工作地址后执行了聚合,不同的工作地址看成不同的一整个表,所以用*是没有问题的,总结来说就是select gender, count(*) from emp group by gender ;  select gender首先他会筛选性别这个字段 ,然后通过 group by 进行分组,这个时候他会自动去统计字段里面的类别,分为男和女2个组,然后,再通过,count(*)去统计每个组的人数。此时就能够根据工作地址workaddress分组,然后获取每一个工作地址的员工年龄小于35的员工数量

select count(*) from emp where age<35 group by workaddress ;

执行结果如下:

94ac14d5de2444849578b8a3ce1f3f7a.png

当然此时我们很难看出是哪个工作地址的员工的数量所以我们再补全一下代码,将workaddress也进行一个查询,当然workaddress要放置于count(*)前面,注意workaddress和count(*)之间的逗号不能省略

select workaddress , count(*) from emp where age<35 group by workaddress ;

执行结果如下:

046c0741d3794c44bd581ded2b926bb3.png

此时可以看出年龄小于35的员工,在上海的有1人,在北京的有6人,而其他工作地址的数据为什么没有被查询出来,因为它们不满足一个条件就是,它们的年龄没有小于35,所以没有被查询出来

接下来就要考虑查询员工数量大于等于3的工作地址,意思就是要在分组的基础上再进行过滤,我们知道where是分组之前进行过滤,而having是分组之后对结果进行过滤,所以我们肯定要用到having,而且where是不能判断聚合函数的,所以你不能写where count(*) >= 3,我们只能让where去判断age<35,让having去判断count(*) >= 3

select workaddress, count(*)  from emp where age < 35 group by workaddress having count(*) >= 3 ;

执行结果如下:

e663d639af1e404ea32d1cef01e3f335.png

当然,这里给大家介绍一下我们也可以这样写,给它起一个别名,address_count,起了别名之后,后面这一块就不用count(*)了,用别名来进行分组之后的过滤是一样的

select workaddress, count(*) address_count from emp where age < 45 group by workaddress having address_count >= 3;

4.统计各个工作地址上班的男性及女性员工的数量

可以按照前面的方式一步步来完善操作,就不赘述这么多了

1.统计各个地址,男性及女性员工的数量,那么肯定是要根据两个方面进行分组的,一个是地址,一个是性别。当然我们需要特别注意的是多个分组字段之间也是要用逗号分隔的,千万不能漏掉

select * from emp group by gender , workaddress ;

2.统计员工数量肯定是需要用到count(*)

select count(*) from emp group by gender , workaddress ;

执行如下:

9c6478417808407796f64148cbbe7f41.png

3.做到第2部其实条件已经基本完善了,但是不太直观,如果想要查询的数据更好看的话就再添加一下查询字段和别名

select workaddress, gender, count(*) '数量' from emp group by gender , workaddress ;

执行如下:

5fda943b87ad44309593fab46959338a.png

分组查询注意事项:

执行顺序: where > 聚合函数 > having 。(where在分组之前进行过滤,而分组的时候会执行聚合函数,而having是在分组聚合之后过滤的)

支持多字段分组, 具体语法为 : group by columnA,columnB    (注意两个字段中间的逗号不能漏掉)

分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。

这句话如何理解?如图

d1f9d84ab03b468da9bac7166ad138a0.png

大家看,此时我是男9女7,如果我前面加一个name能不能执行?可以,但是执行出来的name值没有任何意义,女性显示一个沈立聪什么含义呢?女性只有沈立聪嘛,女性有很多,它只是展示出来第一个女性的姓名,所以没有任何意义

2258aeb67e0f4c7792a668d599c038f1.png


DQL- 排序查询

排序在日常开发中是非常常见的一个操作,有升序排序,也有降序排序。

179b15b850be4a3ca225e5b304713e97.png

语法

SELECT 字段列表  FROM  表名 ORDER BY 字段1  排序方式1 , 字段2  排序方式2 ;

大家由此代码可以看出,实际上排序操作是支持多字段排序的,而排序时,第一个就是指定字段名,第二个指定排序方式

排序方式

1.ASC : 升序(默认值)

2.DESC: 降 序

注意事项:

1.如果是升序, 可以不指定排序方式ASC ;

2.如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序 ;

 案例:

1.根据年龄对公司的员工进行升序排序

select * from emp order by age asc;select * from emp order by age;

执行如图 :

b8a9520337e749f8aaf6472b910e8d31.png  

 如果要进行降序排序则对asc进行一个替换,替换为desc即可

bba3b12f2a204a9fac3763d75ef50526.png

写法上的一些思考

 1.基础语法先写出来

select * from emp ;

2.再写排序关键字order by

select * from emp order by age asc;

2.根据入职时间对员工进行降序排序

select * from emp order by entrydate desc;

 执行结果如图:

c92d31abccff41a7bf5589252d951939.png

此时可观察到降序 

3.根据年龄对公司的员工进行升序排序 , 年龄相同 , 再按照入职时间进行降序排序

select * from emp order by age asc , entrydate desc ;

注意,这里多字段排序的意思是,如果前一个字段信息相同了,排序不了之后,才会根据第二个字段进行排序,不是说字段1可以进行升序,字段2可以进行降序

多字段排序,多字段之间使用逗号分隔

 ab8a5d2f1fd3476e8cbe092569e04d58.png


相关文章:

SQL-分组查询

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;重拾MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出现错误&am…...

HBase 基础

HBase 基础 HBase1. HBase简介1.1 HBase定义1.2 HBase数据模型1.2.1 HBase逻辑结构1.2.2 HBase物理存储结构1.2.3 数据模型 1.3 HBase基本架构 2. HBase环境安装2.1 HBase 安装部署2.1.1 HBase 本地按照2.1.2 HBase 伪分布模式安装2.1.3 HBase 集群安装 2.2 HBase Shell操作2.2…...

android 11添加系统api供app使用

实现要求&#xff1a;添加系统api到sdk&#xff0c;公开给未签名app使用 1.将代码添加到 frameworks/base/core/java 目录下&#xff0c;创建自己的包名&#xff0c;这个路径下可以自动识别&#xff0c;更新到current.txt&#xff0c;不用改编译规则 比如&#xff1a;framework…...

im6ull学习总结(三-3)freetype

1、Freetype简介 FreeType是一个开源的字体渲染引擎&#xff0c;主要用于将字体文件转换为位图或矢量图形&#xff0c;并在屏幕上渲染出高质量的字体。它提供了一组API&#xff0c;使开发者能够在自己的应用程序中使用和呈现字体。 FreeType最初是作为一个独立项目开发的&…...

基于OpenCV的谷物颗粒识别

基于OpenCV的谷物颗粒识别 一、程序整体功能介绍1.1 导入库与函数定义1.2 颜色分割与灰度处理1.3 二值化与轮廓检测1.4 绘制与计数1.5 主程序与结果展示 二、算法原理与实现流程2.1算法原理&#xff08;1&#xff09;颜色分割&#xff08;2&#xff09;灰度处理与二值化&#x…...

Aloha 机械臂的学习记录3——AWE:Pycharm运行代码记录

之前的博客创作了三偏关于Aloha_AWE的liunx终端指令运行代码的示例: Aloha 机械臂的学习记录——AWE&#xff1a;Bimanual Simulation Suite: https://blog.csdn.net/qq_54900679/article/details/134889183?spm1001.2014.3001.5502 Aloha 机械臂的学习记录1——AWE&#x…...

开源协议概览

身为程序员&#xff0c;我们不可避免的要和开源项目打交道&#xff0c;不管是我们自己做了些开源项目&#xff0c;还是使用开源项目&#xff0c;对各种开源协议的了解是必要的。 OSI(Open Source Initiative) OSI&#xff0c;开发源代码组织&#xff0c;是一个旨在推动开源软件…...

分布式缓存

分布式缓存 缓存雪崩 缓存雪崩我们可以简单的理解为&#xff1a;由于原有缓存失效&#xff0c;新缓存未到期间所有原本应该访问缓存的请求都去查询数据库了&#xff0c;而对数据库 CPU 和内存造成巨大压力&#xff0c;严重的会造成数据库宕机。从而形成一系列连锁反应&#xf…...

BSC/平衡记分卡

一、Balanced Score Card BSC即平衡计分卡&#xff08;Balanced Score Card&#xff09;&#xff0c;是常见的绩效考核方式之一&#xff0c;是从财务、客户、内部运营、学习与成长四个角度&#xff0c;将组织的战略落实为可操作的衡量指标和目标值的一种新型绩效管理体系。 是…...

论文阅读_训练大模型用于角色扮演

英文名称: Character-LLM: A Trainable Agent for Role-Playing 中文名称: 角色-LLM&#xff1a;训练Agent用于角色扮演 文章: [https://arxiv.org/abs/2310.10158](https://arxiv.org/abs/2310.10158) 作者: Yunfan Shao, Linyang Li, Junqi Dai, Xipeng Qiu 机构: 复旦大学…...

v-if控制div内容显示,克隆这个div但是v-if没有效果

问题描述&#xff1a; 我的子页面打印的时候通过isPdf来隐藏“选择参加人员”按钮。 我子页面有个el-dialog&#xff0c;el-dialog里面有个大的div它的id为app-pre-meet-add&#xff0c;在子页面我通过isPdf来显示我想要的内容。现在我在父页面先通过this.$refs.child.control…...

flutter的状态管理学习

文章目录 1.flutter widget分类2. 代理组件又分为3. 状态 state 数据4. 刷新 数据变化5. code 1.flutter widget分类 组合渲染代理 2. 代理组件又分为 Positioned向父组件传递数据InheritedWidget向子组件传递数据 3. 状态 state 数据 状态就是用到了向子组件传递数据&#xff…...

开源免费虚拟化KVM的部署及其虚拟机资源变更、快照、克隆等常见运维操作

实践说明&#xff1a;基于RHEL9(AlmaLinux9.1)部署&#xff0c;同类系统(CentOS9,RockyLinux9等)适用&#xff0c;但适用场景是不限于此的。 文档说明&#xff1a;本文档旨在帮助快速应用KVM虚拟化技术&#xff0c;重在实践操作&#xff0c;提供了简要参考。 文档形成时期&…...

阿里云git clone超时报错解决方法

参考&#xff1a;引用文章...

力扣刷题-二叉树-合并二叉树

617.合并二叉树&#xff08;经典&#xff09; 合并二叉树是操作两棵树的题目里面很经典的&#xff0c;如何对两棵树遍历以及处理&#xff1f; 给定两个二叉树&#xff0c;想象当你将它们中的一个覆盖到另一个上时&#xff0c;两个二叉树的一些节点便会重叠。 你需要将他们合并…...

了解JavaScript 加密、混淆和生成签名

分析并理解网站的 JavaScript 加密、混淆和生成签名的方法是 JavaScript 逆向工程中的一个重要方面。这些技术通常用于保护代码免遭未授权的访问和修改&#xff0c;或确保数据在传输过程中的安全性。 加密 目的&#xff1a;加密用于保护敏感数据&#xff0c;使得只有拥有正确密…...

Go语言的指针(深度解析)

指针是Go语言中的一个重要概念&#xff0c;它提供了对内存地址的直接访问和操作能力。通过指针&#xff0c;我们可以高效地传递和修改变量的值&#xff0c;避免了值传递所带来的拷贝开销。在本文中&#xff0c;我们将深入探讨Go语言指针的概念、使用方法和注意事项。 指针的本…...

HTB-SAU

信息收集 # cat port.nmap # Nmap 7.94 scan initiated Thu Jan 11 19:26:51 2024 as: nmap -sS --min-rate 10000 -p- -oN port.nmap 10.10.11.224 Nmap scan report for 10.10.11.224 (10.10.11.224) Host is up (0.28s latency). Not shown: 65531 closed tcp ports (r…...

AI创新之美:AIGC探讨2024年春晚吉祥物龙辰辰的AI绘画之独特观点

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《粉丝福利》 《linux深造日志》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下…...

Linux的SSH服务

一.SSH服务简介 1.什么是SSH SSH&#xff08;Secure Shell&#xff09;是一种安全通道协议&#xff0c;主要用来实现字符界面的远程登录、远程复制等功能。SSH 协议对通信双方的数据传输进行了加密处理&#xff0c;其中包括用户登录时输入的用户口令&#xff0c;SSH 为建立在应…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...