【数据库】聚合函数|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)跟踪滤波,得到距离、方位角、俯仰角误差结果。程序已调…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
