【数据库】聚合函数|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应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...

GraphQL 实战篇:Apollo Client 配置与缓存
GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...
OCR MLLM Evaluation
为什么需要评测体系?——背景与矛盾 能干的事: 看清楚发票、身份证上的字(准确率>90%),速度飞快(眨眼间完成)。干不了的事: 碰到复杂表格(合并单元…...

内窥镜检查中基于提示的息肉分割|文献速递-深度学习医疗AI最新文献
Title 题目 Prompt-based polyp segmentation during endoscopy 内窥镜检查中基于提示的息肉分割 01 文献速递介绍 以下是对这段英文内容的中文翻译: ### 胃肠道癌症的发病率呈上升趋势,且有年轻化倾向(Bray等人,2018&#x…...

深入解析光敏传感技术:嵌入式仿真平台如何重塑电子工程教学
一、光敏传感技术的物理本质与系统级实现挑战 光敏电阻作为经典的光电传感器件,其工作原理根植于半导体材料的光电导效应。当入射光子能量超过材料带隙宽度时,价带电子受激发跃迁至导带,形成电子-空穴对,导致材料电导率显著提升。…...