【数据库】聚合函数|group by分组|having|where|排序|函数 关键字的使用
目录
一、聚合函数
1、max()
2、min()
3、avg()
4、sum()
5、count()
二、group by 分组汇总
一般聚合函数配合着group by(分组)语句进行使用
把一组的数据放到一起,再配合聚合函数进行使用
三、having
having语句 做筛选的
四、where和having的作用以及区别:
五、where、having、聚合函数之间的区别和用法
1、where、聚合函数、having 在from后面的执行顺序:
2、若须引入聚合函数来对group by 结果进行过滤 则只能用having
3、having语句通常与group by语句联合使用,用来过滤由group by语句返回的记录集。 having语句的存在弥补了where关键字不能与聚合函数联合使用的不足。
4、演示:
六、order by 排序
七、AS:设置别名
1、为表指定别名 <表名> AS <别名>
2、为字段指定别名 <字段名> AS <别名>
八、函数/关键字
1、distinct
distinct和null值
distinct在多列上的使用
distinct和聚合函数
2、limit子句
3、union
九、示例
一、聚合函数
1、max()
2、min()
3、avg()
4、sum()
5、count()
count函数有几种形式:
count(*),count(expression)和count(distinct expression)
expression——必需,一个字段或者一个字符串值
-
count(*)函数返回由SELECT语句返回的结果集中的行数。-
count(*)函数计算包含NULL和非NULL值的行,即:所有行。
-
-
count(expression)返回不包含NULL值的行数。 -
count(distinct expression)返回不包含NULL值的唯一行数。
年龄最大的是多少
select max(age) from person;
年龄最小的是多少
select min(age) from person;
年龄平均
select avg(age) from person;
年龄和
select sum(age) from person;
一共有多少人
select count(*) from person;
❕这里如果age是空 就不会计数 如果用* 会对空的行会计数
select count(age) from person;
二、group by 分组汇总
一般聚合函数配合着group by(分组)语句进行使用
把一组的数据放到一起,再配合聚合函数进行使用
⚠️group by查询的内容 除了聚合函数外的其他内容 必须都写在group by 的后面
使用了group by 后,要求Select出的结果字段都是可汇总的,否则就会出错。
‼️‼️‘每个’后面是什么,‘group by’ 后面就是什么计算每个班级的平均年龄
select class,avg(age) from person group by class;-- 查询每个班级的最大年龄
select class,max(age) from person group by class;-- ‼️坑,下面这样查id会报错:SELECT list is not in GROUP BY...
-- 因为查出来的最大值对应的id不一定是唯一的,且“id class”没有被汇总...
select id,class,max(age) from person group by class;-- 报错:⚠️
SELECT * from person group by name,age -- 报错:⚠️SELECT MAX(学号),MAX(姓名),MAX(性别),MAX(年龄),sum(成绩)
FROM 学生表
GROUP BY 学号
是对的,汇总出每一同学号学生的总成绩。注意的是,只要学号相同,别的如果有不同,取它们值最大的一条作为显示输出。SELECT 学号,姓名,性别,年龄,sum(成绩)
FROM 学生表
GROUP BY 学号,姓名,性别,年龄
这样写也是对的,但注意的是,学号,姓名,性别,年龄中,只要有一个不同,就会当成另一条记录来汇总。
三、having
having语句 做筛选的
-
where 是在原始数据的基础上进行筛选 ,⚠️where后面不能使用“聚合函数”
-
having是在分组查询之后和聚合函数计算之后的结果中进行的筛选
查询每个班级有多少人
select class,count(*) from person group by class;
查询 班级人数超过2人的班级 ‼️在查询出班级人数的基础上再进行查询 用having
select class,count(*) from person group by class having count(*) > 2
四、where和having的作用以及区别:
select sid,avg(score) from SC GROUP BY sid HAVING avg(score) > 60
select sid,avg(score) from SC where avg(score) > 60 ——————报错
-
WHERE是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,即在结果返回之前起作用;
-
where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
-
且where后面不能使用“聚合函数”,因为where的执行顺序在聚合函数之前。
-
HAVING是一个过滤声明,过滤是在查询数据库的结果返回之后进行过滤,即在结果返回之后起作用,且having后面可以使用“聚合函数”。
-
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。
-
注意:having是对查出来的结果进行过滤,那么对没有查出来的值就不能使用having。
五、where、having、聚合函数之间的区别和用法
1、where、聚合函数、having 在from后面的执行顺序:
where > 聚合函数(sum,min,max,avg,count) > having
2、若须引入聚合函数来对group by 结果进行过滤 则只能用having
3、having语句通常与group by语句联合使用,用来过滤由group by语句返回的记录集。 having语句的存在弥补了where关键字不能与聚合函数联合使用的不足。
4、演示:
select sum(score) from student
where sex='man'
group by name
having sum(score)>210
六、order by 排序
在sql语句的结尾 添加一个order by的语句
order by 查询的结果的列 asc|desc
-
asc 升序——⚠️不写默认asc
-
desc 降序
当age一样,按照phone降序
select * from person order by age asc,phone descselect name,age from person order by age-- 以下有as,order by后用年龄/age都可:
select name,age as 年龄 from person order by 年龄/age
七、AS:设置别名
1、为表指定别名 <表名> AS <别名>
-
<表名>:数据库中存储的数据表的名称。 -
<别名>:查询时指定的表的新名称。 -
AS关键字可以省略,省略后需要将表名和别名用空格隔开 -
表的别名不能与该数据库的其它表同名
-
表别名只在执行查询时使用,并不在返回结果中显示。
2、为字段指定别名 <字段名> AS <别名>
-
<字段名>:为数据表中字段定义的名称。 -
<字段别名>:字段新的名称。 -
AS关键字可以省略,省略后需要将字段名和别名用空格隔开。 -
在条件表达式中不能使用字段的别名,否则会出现“ERROR 1054 (42S22): Unknown column”这样的错误提示信息。
-
字段的别名不能与该表的其它字段同名。
-
字段定义别名之后,会返回给客户端显示,显示的字段为字段的别名。
八、函数/关键字
1、distinct
select distinct columns from 表 where 条件
-
distinct和null值
-
如果列具有null值,并且对该列使用distinct子句,mysql将保留一个
null值,并删除其它的null值,因为distinct子句将所有null值视为相同的值。
-
-
distinct在多列上的使用
-
select distinct state, city from——获取
city和state的唯一组合
-
-
distinct和聚合函数
-
使用具有聚合函数的
distinct子句中,在mysql将聚合函数应用于结果集之前删除重复的行 -
select count(distinct state) from...
-
2、limit子句
-
select column1,column2,... from table LIMIT offset , count
offset参数指定要返回的第一行的偏移量。第一行的偏移量为0,而不是1。count指定要返回的最大行数。 -
举例说明
例如下面两条语句: SELECT * FROM table limit 2 offset 1; SELECT * FROM table limit 2,1;前者表示跳过一条数据,读取两条数据 后者表示跳过两条数据,读取一条数据比如有三条数据,id 分别为 0,1,2 则前者读取的数据 id 为 1 和 2 后者读取的数据为 2总结: LIMIT 2 OFFSET 1 :OFFSET 表示跳过,LIMIT 表示读取 LIMIT 2, 1 :前面一个数字为跳过,后面的为读取
3、union
union 语句:用于将不同表中相同列中查询的数据展示出来;(不包括重复数据)
union all 语句:用于将不同表中相同列中查询的数据展示出来;(包括重复数据)
SELECT 列名称 FROM 表名称 UNION SELECT 列名称 FROM 表名称 ORDER BY 列名称; SELECT 列名称 FROM 表名称 UNION ALL SELECT 列名称 FROM 表名称 ORDER BY 列名称;
九、示例
现在有一个表person:
id,name,age
1,jay,18
2,jay,18
3,waw,20
4,zzq,25
思考:
1、通过sql语句查询出重复的数据有哪些
SELECT name,age from person group by name,age having count(*) >= 2
2、删除重复的数据
删除重复数据 那么保留的是什么?——如果数据重复 保留最小的id的数据,如果数据不重复,保留该数据
-- ⚠️步骤1:查询要保留的数据
-- 只要根据名字和年龄做分组,查询分组内最小的id值 就是要保留的数据
SELECT min(id) from person group by name,age
-- ⚠️步骤2:删除重复数据
-- ⚠️如下:‼️查询某个表的数据的同时去修改/删除该表的数据,直接这样操作不行,mysql不允许
❌delete from person where id not in (SELECT min(id) from person group by name,age)
-- ⚠️可以把查询的结果单独的放在一个结果集里t,通过查询这个结果集,删除表里的数据
1、select min(id) from person group by name,age ——-放到临时表t里面
2、select id from t
3、delete from person where id not in (select id from t)
delete from person where id not in (select id from (select min(id) as id from person group by name,age)t)
相关文章:
【数据库】聚合函数|group by分组|having|where|排序|函数 关键字的使用
目录 一、聚合函数 1、max() 2、min() 3、avg() 4、sum() 5、count() 二、group by 分组汇总 一般聚合函数配合着group by(分组)语句进行使用 把一组的数据放到一起,再配合聚合函数进行使用 三、having having语句 做筛选的 四、where和having的作用以及区…...
docker安装mongoDB及使用
一.mongodb是什么? MongoDB是一个NoSQL的非关系型数据库 ,支持海量数据存储,高性能的读写 1.mongo的体系结构 SQL术语/概念MongoDB术语/概念解释/说明databasedatabase数据库tablecollection数据库表/集合rowdocument数据记录行/文档colum…...
Linux 之五:权限管理(文件权限和用户管理)
1. 文件权限 在Linux系统中,文件权限是一个非常基础且重要的安全机制。它决定了用户和用户组对文件或目录的访问控制级别。 每个文件或目录都有一个包含9个字符的权限模式,这些字符分为三组,每组三个字符,分别对应文件所有者的权限…...
基于YOLOv8深度学习的葡萄病害智能诊断与防治系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战
《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…...
MySQL 在聚合函数查询的结构中继续过滤
HAVING HAVING 关键字和 WHERE 关键字都可以用来过滤数据,且 HAVING 支持 WHERE 关键字中所有的操作符和语法,如果想要从 GROUP BY 分组中进行筛选的话,不是用 WHERE 而是使用 HAVING 来进行聚合函数的筛选。 语法 SELECT <列名1>, <列名2>,…...
UE4.27_ParticleSystem(没写完的材料)
UE4.27_ParticleSystem(没写完的材料) 参考实例: UE4[蓝图]下雪效果及雪的材质的实现...
腾讯云轻量服务器流量用完了怎么办?停机吗?
腾讯云轻量服务器流量用完了怎么办?超额流量另外支付流量费,流量价格为0.8元/GB,会自动扣你的腾讯云余额,如果你的腾讯云账号余额不足,那么你的轻量应用服务器会面临停机,停机后外网无法访问,继…...
块级作用域、变量提升
1.块级作用域 JS 中作用域有:全局作用域、函数作用域。没有块作用域的概念。ECMAScript 6(简称 ES6)中新增了块级作用域。块作用域由 { } 包括,if 语句和 for 语句里面的{ }也属于块作用域。 2.变量提升 如果变量声明在函数里面,则将变量声…...
c# 连接oracle 及对应获取数据集
1、数据库配置xml,首先连接成功后会自动创建xml并保存到对应xml,如下 static string ConnPath AppDomain.CurrentDomain.BaseDirectory "ConnOrcle.xml"; 声明xml名称,便于后续写入对应数据库参数 2、创建xml /// <summar…...
JS直接量及其相关对象
什么是直接量 直接量是指不需要创建对象就可以直接使用的变量。ES中的直接量主要有三种类型:表示字符串的string类型、表示数字的number类型和表示true/false的boolean类型。当我们直接将值赋给变量后,ES就会自动判断其类型,而且当参数发生变…...
一 windso10 笔记本刷linux cent os7.9系统
1:准备材料 16G以上U盘, 笔记本一台 镜像选了阿里云镜像:centos-7-isos-x86_64安装包下载_开源镜像站-阿里云 软件:链接:https://pan.baidu.com/s/13WDp2bBU1Pdx4gRDfmBetg 提取码:09s3 2:把镜像写入U盘,本人已经写入好了,选择镜像,点开始就是,确定等…...
118.龙芯2k1000-pmon(17)-制作ramdisk
目前手上这个设备装系统不容易,总是需要借助虚拟机才能实现。 对生产就不太那么友好,能否不用虚拟机就能装Linux系统呢? 主要是文件系统的问题需要解决,平时我们一般是用nfs挂载后,然后对硬盘格式化,之后…...
IP-guard邮件管控再升级,记录屏幕画面,智能阻断泄密邮件
邮件是工作沟通以及文件传输的重要工具,却也成为了信息泄露的常见渠道。员工通过邮件对外发送了什么内容,是否含有敏感信息都无从得知,机密通过邮件渠道外泄也难以制止。想要防止企业的重要信息通过邮件方式泄露,我们不仅需要通过技术措施对外发邮件的行为进行规范,也要对…...
#LLM入门|Prompt#2.10_评估、自动化测试效果(下)——当不存在一个简单的正确答案时 Evaluation Part2
上一章我们探索了如何评估 LLM 模型在 有明确正确答案 的情况下的性能,并且我们学会了编写一个函数来验证 LLM 是否正确地进行了分类列出产品。 在使用LLM生成文本的场景下,评估其回答准确率可以是一个挑战。由于LLM是基于大规模的训练数据进行训练的&am…...
round四舍五入在python2与python3版本间区别
round()方法返回数值的小数点四舍五入到n个数字。 语法 以下是round()方法的语法: round( x ,n) 参数 x --这是一个数值,表示需要格式化的数值 n --这也是一个数值,表示小数点后保留多少位 返回值 该方法返回 数值x 的小数点四舍五入到n个数字 …...
新概念英语第二册(73)
【New words and expressions】生词和短语(9) record-holder 纪录保持者 truant n. 逃学的孩子unimaginative adj. 缺乏想像力的shame n. 惭愧,羞耻 hitchhike v. 搭便车旅行 m…...
Vue项目实战-空间论坛(2)
项目实战 实现userlist页面 获取userlist列表,可使用ajax,axios 实现 这里采用ajax实现,需要添加Jquery依赖,然后在UserListView.vue中引入 在UserListView.vue组件的入口函数中定义users变量,并引入ref 使用ajax从云端动…...
小老虎吃汉堡,认识continue和break
continue;//结束本次循环,执行下面的循环 break; //结束本次及以后的循环,执行循环下面的代码1. /*小老虎在吃汉堡,但是第三个汉堡上被挤了芥末,不能吃,跳过去又吃第四、五个*/ for (int i1;i<5;i){if (i3){contin…...
docker搭建zero-ui
确保你已经安装了Docker和Docker Compose。如果没有,请参照官方文档安装:Docker 和 Docker Compose。 使用 Docker CLI 获取 Zero-UI 镜像: 首先,你需要从Docker Hub获取Zero-UI的Docker镜像。你可以使用 docker pull 命令来下载它。 docker…...
187基于matlab的弹道目标跟踪滤波方法
基于matlab的弹道目标跟踪滤波方法,扩展卡尔曼滤波(extended Kalman filter, EKF)、转换测量卡尔曼滤波(conversion measurement Kalman filter, CMKF)跟踪滤波,得到距离、方位角、俯仰角误差结果。程序已调…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
热烈祝贺埃文科技正式加入可信数据空间发展联盟
2025年4月29日,在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上,可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞,强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...
【实施指南】Android客户端HTTPS双向认证实施指南
🔐 一、所需准备材料 证书文件(6类核心文件) 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...
Linux基础开发工具——vim工具
文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...
工厂方法模式和抽象工厂方法模式的battle
1.案例直接上手 在这个案例里面,我们会实现这个普通的工厂方法,并且对比这个普通工厂方法和我们直接创建对象的差别在哪里,为什么需要一个工厂: 下面的这个是我们的这个案例里面涉及到的接口和对应的实现类: 两个发…...
