5-高级SQL查询

news2024/10/7 18:25:10

PS:插入查询结果

把一张表查询出的结果,插入到另一张表中。要求两张表的列数和列类型要匹配。

前面讲的所有select规则在此处都适用~

1.聚合查询

  • 聚合查询:行和行之间进行运算。
  • 带表达式查询:列和列之间进行运算。

常⻅的聚合函数(SQL里内置的函数)有:

它们都是针对表中某个列的所有行来进行运算的~

MySQL的函数,相当于Java里的方法:

聚合函数需要设置参数,在查询中可以使用多次聚合函数,可以多个聚合函数一起使用。

不是数字的数据,直接舍弃。

1.1.count函数

返回查询到的数据的条数。

用法一:

能查询出所有null和非null的数据总和。推荐使用,最标准,MySQL、SQL Server、Oracle都能使用。

用法二:

能查询出所有null和非null的数据总和。兼容性不是很好,MySQL能用,其他数据库不一定能用。

用法三:

count(列名),查询当前字段中非null的数据总和。不推荐使用,查询结果极不稳定。

建议写成:

用法四:

count(表达式)。

count(1)1就是常数表达式。

在不同的count统计场景下,要使用不同的count查询。

若要查询表中非null的数据总和,建议使用count(*)配合where条件使用。

1.2.sum函数

返回查询到的数据的总和,不是数字没有意义。

PS:sum函数执行逻辑——只会统计有效的数据

判断数据是否为有效数据:

  • 若是有效数据:会将其加入已经计算的结果集中。
  • 若不是有效数据(NULL或非数值型(比如varchar型)):会将其看作0,并加入已经计算的结果集中。

PS:sum函数查询 VS 表达式求和查询

若要求和查询的数据中包含NULL:

  • sum函数:会把除去NULL外的其他数据进行求和运算。
  • 表达式求和:直接得到和为NULL。

1.3.avg函数

返回查询到的数据的平均值,不是数字没有意义,会将含有不合规范数据的一行数据整体舍弃掉。

1.4.max函数

返回查询到的数据的最⼤值,不是数字没有意义。

1.5.min函数

返回查询到的数据的最⼩值,不是数字没有意义。

PS:ifnull函数

ifnull函数是 MySQL 控制流函数之⼀,它接收两个参数,如果第一个参数不是 NULL,则返回第⼀个参数,否则返回第⼆个参数。

ifnull(参数1,参数2);

使用ifnull函数的实例——解决遗留问题:总成绩为null的问题

另外的解决⽅案:使⽤⾮空约束或默认值 0 来解决。

  • 在公司里多使用分布式多份部署,一份程序部署到了多台服务器,处理能力会是原来的多倍,但没有办法把MySQL分成多份。
  • so~MySQL的资源很紧缺,而程序的资源相对不紧缺。在MySQL中应尽量不使用表达式函数(它们应该是在Java程序里)

所以这种问题最好在建表时就设置好非空约束,从而避免ifnull查询,减轻MySQL负担。

2.分组查询group by

select 中使⽤ group by ⼦句可以对指定列进⾏分组查询。需要满⾜:使⽤ group by 进⾏分组查询时,select 指定的字段必须是“分组依据字段”,其他字段若想出现在 select 中则必须包含在聚合函数中。

select 列名1, sum(列名2),...from 表名 group by 列名1, 列名3;

PS:distinct(去重) VS group by(分组)

①创建测试数据

②distinct使用

基本语法:

select distinct 列名 [,列名...] from 表名;

a.单列去重

根据 aid(文章 ID)去重:

b.多列(两列及以上)去重

根据 aid(文章 ID)和 uid(用户 ID)联合去重:

c.聚合函数 + distinct

计算 aid 去重之后的总条数:

③group by使用

基本语法:

select 列名 [,列名...] from 表名 group by 列名

a.单列去重

根据 aid(文章 ID)去重:

与 distinct 相比 group by 可以显示更多的列,而 distinct 只能展示去重的列。

b.多列去重

根据 aid(文章 ID)和 uid(用户 ID)联合去重:

c.聚合函数 + group by

统计每个 aid 的总数量:

从上述结果可以看出,使用 group by 和 distinct 加 count 的查询语义是完全不同的,distinct + count 统计的是去重之后的总数量,而 group by + count 统计的是分组之后的每组数据的总数。

④distinct 和 group by的区别

官方文档在描述 distinct 时提到:在大多数情况下 distinct 是特殊的 group by

但二者还是有一些细微的不同的,比如以下几个:

区别1:查询结果集不同

1)当使用 distinct 去重时,查询结果集中只有去重列信息。当试图添加非去重字段查询时,SQL 会报错:

2)而使用 group by 排序可以查询一个或多个字段:

区别2:使用业务场景不同

1)统计去重之后的总数量需要使用 distinct。使用 distinct 统计某列去重之后的总数量:

2)而统计分组明细,或在分组明细的基础上添加查询条件时,就得使用 group by 了。使用 group by 统计分组之后数量大于 2 的文章:

区别3:性能不同

  • 如果去重的字段有索引,那么 group by 和 distinct 都可以使用索引,此情况它们的性能是相同的。
  • 而当去重的字段没有索引时,distinct 的性能就会高于 group by,因为在 MySQL 8.0 之前,group by 有一个隐藏的功能会进行默认的排序,这样就会触发 filesort 从而导致查询性能降低。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL——聚合函数

我们上一篇讲到了 SQL 单行函数。实际上 SQL 函数还有一类,叫做聚合(或聚集、分组)函数,它是对一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值。接下来我们来看看什么是聚合函数及聚合函数的分类 1. 聚合函数介绍 1.1 什么是聚合函数? 聚合函数作用于…

redis 7.x 缓存双写一致性的解决方案

一 redis缓存双写一致性 1.1 保证redis一致性的原则 1.给缓存设置过期时间,定期清理缓存并写回,是保证最终一致性的解决方案。使用场景:在数据读多写少的情况下作为缓存来使用。 我们可以对已存入缓存的数据设置过期时间,所有…

Qt-学习 QJson协议解析

内容来源于哔站视频,仅仅作为自己的笔记记录,感兴趣的小伙伴去原作品大call(此处给作者三鞠躬),Json以及Json在Qt中的使用 【Qt/C/C】_哔哩哔哩_bilibili 目录 1、Json介绍: 1.1 Json的定义 1.2 Json的数据格式 1…

Java面试知识点(全)- Java并发- Java并发基础

Java面试知识点(全) 导航: https://nanxiang.blog.csdn.net/article/details/130640392 注:随时更新 多线程解决什么问题 CPU、内存、I/O 设备的速度是有极大差异的,为了合理利用 CPU 的高性能,平衡这三者的速度差异&#xff0c…

thinkphp6中使用session设置无效问题的解决及注意事项

就如thinkphp官方在文档开头所描述的一样,ThinkPHP6.0基于精简核心和统一用法两大原则在5.1的基础上对底层架构做了进一步的优化改进,并更加规范化;其实从5.x版本开始thinkphp本身就是为api应用而生。特别是在6.0版本开始框架默认压根不开启和…

大数据-玩转数据-FLINK(Yarn模式)的安装与部署

一、为什么要用Flink on Yarn HA 模式 默认情况下,Flink 只有一个JobManager,这将导致单点故障,使用JobManager HA ,集群可以从单点故障中恢复,从而避免单点故障,我们可以在Standalone 或 Flink on Yarn 集…

【2023 · CANN训练营第一季】初识新一代开发者套件 Atlas 200I DK A2---章节小测微认证考试

微认证考试 1、以下不属于模型适配工具内置的模型的是? A. 目标检测模型 B. 图像分类模型 C. 语义分割模型 D. 关键点检测模型 C 2、模型适配工具安装前需要先安装? A. mobaXterm B. python3.9 C. Vscode D. Anaconda D 3、在哪个目录下可查看端…

docker 部署 -v指令遇到docker: invalid reference format.

检查了半天才发现,换行符后面不能有空格!有空格就报错!

vite创建vue3项目

vite创建vue3项目 方式一(推荐) 脚手架快速创建,勾选依赖的方式 这种方式创建的项目最快捷,因为基本依赖都装好了 npm init vuelatest方式二 使用官方模板创建vue3项目 这种方式会基于模板创建项目,对于官方模板vu…

Rollup 基本概念及使用

Rollup是一款基于ESModule模块规范实现的JavaScript打包工具,在前端社区中赫赫有名,同时也在Vite的架构体系中发挥着重要作用。不仅是Vite生产环境下的打包工具,其插件机制也被Vite所兼容,可以说是Vite的构建基石。 接下来&#…

cesium entity与时间轴关联(添加运动轨迹)

1、先添加一个entity实体 用model加载一个飞机实体 let entity viewer.entities.add({position: Cesium.Cartesian3.fromDegrees(120, 21),model: {uri: "/static/Cesium_Air.glb",minimumPixelSize: 128,maximumScale: 20000,},}) viewer.trackedEntity entity;…

LIN-报文结构

文章目录 协议规范一、字节场二、报文头(HEADER FIELDS)同步间隔(synchronisation break)同步场(SYNCH FIELD)标识符场(IDENTIFIER FIELD) 三、数据场(DATE FIELDS)四、校…

【负载均衡式在线OJ】 数据库

文章目录 41.使用Postman进行综合调试42.了解-前端预备52. 添加oj用户到MySQL53. 使用MySQL_Workbench创建表结构54. 测试录题功能55.重新设计oj_model56.编写oj_model具体代码57.MySQL综合测试58.结项与项目扩展思路 41.使用Postman进行综合调试 完善判题功能 先编译再测试 …

SpingBoot简介—helloworld

目录 一、使用idea创建第一个SpringBoot项目 二、Hello World 三、整体项目结构 一、使用idea创建第一个SpringBoot项目 在进行这一步时,可能会遇到问题,如下图所示: 在这里解决方法有以下四种: (1)方法1&…

国内AI大模型 VS chatgpt (20)-- H265/H264有何不同,h265有什么优势?

H265/H264有何不同,h265有什么优势? 文心一言: H.264和H.265是两种不同的视频编码标准,它们在压缩质量和带宽需求方面有所不同。 H.264是一种高效的视频压缩标准,它的编码单位是宏块(macroblock)&#…

XML配置方式整合SSM框架实现用户登录

文章目录 一,创建数据库与表(一)创建数据库(二)创建用户表(三)在用户表里插入记录 二,创建Maven项目三,项目添加相关依赖四,创建日志属性文件五,创…

Aspose.Tasks for Java 23crack

Aspose.Tasks for Java 23crack 新属性允许您控制“分配成本”和“剩余成本”的自动计算。 Aspose.Tasks for Java是一个项目管理API,可帮助您操作Microsoft project文档。开发人员可以定义项目的主要属性和默认属性以及日历信息。他们还可以指定工作日和日历例外情…

【5.21】六、自动化测试—持续集成测试

目录 6.4 持续集成测试 6.4.1 持续集成的概念 6.4.2 持续集成测试框架设计 6.4 持续集成测试 持续集成(Continuous Integration,CI)是软件开发DevOps(DevelopmentOperations)中的一个概念,它强调的是软…

【第十一届泰迪杯数据挖掘挑战赛】A 题:新冠疫情防控数据的分析 思路+代码(持续更新)

【第十一届泰迪杯数据挖掘挑战赛】A 题:新冠疫情防控数据的分析 思路代码(持续更新) 问题背景解决问题代码下载数据分析Task1Task2Task3Task4 问题背景 自 2019 年底至今,全国各地陆续出现不同程度的新冠病毒感染疫情,…

目标检测复盘 --4. Faster RCNN

Fast RCNN的性能得到了很大的提升,但是还是有很大一部分开销在候选框的生成模块,也就是SS算法,Faster RCNN使用一个网络专门干这个事,从而加快整体检测速度,能达到5帧每秒。所以这里的FasterRCNN也就是RPNFastRCNN RPN…