4、数据库操作语句:聚合函数

news2025/2/24 18:00:28

目录

1、定义

2、常用的聚合函数

1)Avg/sum:只适用于数值类型的字段(或变量)。

2)Max/min:适用于数值类型、字符串类型、日期时间类型的字段(或变量)

3)Count:

①作用:I、计算指定字段在查询结果中出现的个数。II、在计算指定字段出现的个数时,不计算null值。

②如果计算表中有多少条记录,如何实现:

③如果需要统计表中的记录个条数,以上三种方式那个效率更高?

3、group by的使用

1)需求:查询各个部门的平均工资,最高工资。

2)使用多个列分组

3)需求:查询各个department_id,job_id的平均工资

4)在group by中使用with rollup,会在不使用with rollup的查询结果上多出一行数据,该数据是group by所有数据的平均数值,作用类似于avg函数。

4、Having的使用(作用:用来过滤数据)

1)如果过滤条件中使用了聚合函数,则必须使用having来替换where。否则,报错。并且having必须声明在group by的后面

2)在开发中使用HAVING 的前提是mql中使用了GROUP BY。

3)Where和having对比

5、SQL底层执行原理

1)Select 语句的完整结构

①SQL92语法

②SQL99语法

③Sql语句的执行过程


1、定义

定义:作用于一组数据,并对一组数据返回一个值

 

2、常用的聚合函数

1)Avg/sum:只适用于数值类型的字段(或变量)。

Select avg(salary),sum(salary),avg(salary)*107 from employees;

公式:avg=sum/count 在计算过程中自动将null值过滤掉。

select avg(commission_pct),sum(commission_pct)/count(commission_pct) from employees;

2)Max/min:适用于数值类型、字符串类型、日期时间类型的字段(或变量)

Select max(salary),min(salary) from employees;

Select max(last_name),min(last_name) from employees;

3)Count

①作用:I、计算指定字段在查询结果中出现的个数。II、在计算指定字段出现的个数时,不计算null值。

Select count(employee_id),count(salary) from employees;

Select count(1),count(2) from employees;//将每条记录看成1(或者2),结果为记录的条数。

②如果计算表中有多少条记录,如何实现:

方式一:count(*)

方式二:count(1)

方式三:count(字段)

③如果需要统计表中的记录个条数,以上三种方式那个效率更高?

I、如果使用的是myisam存储引擎,则三者效率相同O(1)

II、如果使用的是innodb存储引擎,则三者效率:count(*)=count(1)>count(字段)

III、方差、标准差、中位数

3、group by的使用

 

1)需求:查询各个部门的平均工资,最高工资。

Select dapartment_id,avg(salary),sum(salary) from employees group by department_id;//按照部门id分组,计算出各个部门的平均工资以及各个部门的工资总和。

2)使用多个列分组

 

3)需求:查询各个department_id,job_id的平均工资

Select department_id,job_id,avg(salary) from employees group by department_id,job_id;

错误案例:Select department_id,job_id,avg(salary) from employees group by department_id;

结论1:select中出现的非组函数的字符段必须声明在group by中。反之,group by中声明的字段可以不出现在select

结论2group by声明在from后面、where后面,order by前面、limit前面

4)在group by中使用with rollup,会在不使用with rollup的查询结果上多出一行数据,该数据是group by所有数据的平均数值,作用类似于avg函数。

Select  department_id,avg(salary) from employees group by department_id with rollup;

结论3:当使用with rollup时,不能同时使用order by子句进行结果排序,即with rolluporder by是互斥。

4、Having的使用(作用:用来过滤数据)

1)如果过滤条件中使用了聚合函数,则必须使用having来替换where。否则,报错。并且having必须声明在group by的后面

 

练习:查询各个部门中最高工资比10000高的部门信息

Select department_id,max(salary) from employee group by department_id having max(salary)>10000;

2)在开发中使用HAVING 的前提是mql中使用了GROUP BY。

练习:查询部门id10203040这个部门中最高工资比10000高的部门信息

方式一:Select department_id,max(salary)from employees where department_id in (10,20,30,40) group by department_id having max(salary)>10000;

方式二:select department_id,max(salary) from employees group by department_id having max(salary)>10000 and department_id in(120,20,30,40);

推荐方式一,原因:执行效率高

结论:当过滤条件中有聚合函数时,则此过滤条件必须声明在having

当过滤条件中没有聚合函数时,则此过滤条件声明在where中或having中都可以。但是,建议声明在where

3)Wherehaving对比

①从适用范围上讲,having的适用范围更广

②如果过滤条件中没有聚合函数:这种情况下,where的执行效率高于having

5、SQL底层执行原理

1)Select 语句的完整结构

①SQL92语法

Select ……….(存在聚合函数)

From ……..,…..,

Where 多表连接条件 and 不包含聚合函数的过滤条件

Group by …….

Having 包含聚合函数的过滤条件

Order by…,….(asc/desc)

Limit …,…

​​​​​​​②SQL99语法

Select ……….(存在聚合函数)

From …(left/right)join….on 多表连接条件 (left/right)join … on 多表连接条件

Where不包含聚合函数的过滤条件

Group by …….

Having 包含聚合函数的过滤条件

Order by…,….(asc/desc)

Limit …,…

③Sql语句的执行过程

From>on>(left/right join)>where>group by>having>select>distinct>order by>limit

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

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

相关文章

一起来学孟德尔随机化(Mendelian Randomization)

孟德尔随机化最近实在是太火了,想不关注都不行,最近也花了点时间研究了一下,和大家分享一下,共同学习。 什么是孟德尔随机化? 在19世纪,孟德尔用豌豆花作为实验材料,通过对豌豆花颜色、形状等特…

ESP-BOX的GUI移植

因为squareline studio软件中适配了ESP-BOX,所以作者本想直接使用该软件创建的工程,但是会出现花屏的现象,也不知道是不是没有做好esp-box-lite的适配。 因此只能先用squareline studio设计好GUI,然后再导出其代码,在其…

jmeter-13-使用JSR223断言(推荐)

文章目录 前言一、JSR 223 进行断言二、总结 前言 之前都在使用 BeanShell 前后置、断言等,但是查看官方文档时发现推荐使用 JSR223 其实 BeanShell 是 JSR223 里面的一种,下面我们继续了解下。 官网介绍:Apache JMeter - User’s Manual: C…

【数据分享】1929-2022年全球站点的逐月平均露点数据(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 对于具体到监测站点的气象数据,之前我们分享过1929-2022年全球气象…

ffmpeg+nginx-rtmp转发视频流

本篇博客最早发布于实验室公共博客,但已无人维护,现迁移至个人博客 nginx与nginx-rtmp-module安装 画了好几天图,实在有些乏力,找点有意思的事情做做 觉得视频流传输挺有意思,B站找了些视频,但感觉有些大…

【论文简述】IS-MVSNet:Importance Sampling-based MVSNet(ECCV 2022)

一、论文简述 1. 第一作者:Likang Wang 2. 发表年份:2022 3. 发表期刊:ECCV 4. 关键词:MVS、3D重建、重要性采样、无监督误差分布估计 5. 探索动机:以粗到细的方式预测深度图,部分缓解了对于分辨率的限…

Apache James邮件服务器搭建(linux)

1、配置jdk,此处不再赘述,随便搜一下然后照着操作即可 注意:后续james的版本是3.5.0,需要与jdk8配套 2、下载apache james ,apacheJames 下载之后可以直接运行,无需安装 注意:此处选择3.5.0版…

人工智能数据集处理——数据清理1

目录 一、概述 二、缺失值 1、检测缺失值 使用isna() 方法检测na_df中是否存在缺失值 使用natna() 方法 2、缺失值的处理 (1) 删除缺失值 使用删除dropna() 方法删除na_df 对象中缺失值所在的一行数据 删除全为缺失值的行 删除有缺失值的行 (2) 填充缺失值 使用fill…

win10 下搭建hadoop(成功截图)

背景: 搭建hadoop是大数据的启蒙第一步,对初学者有很好的信心建设,建议安装版本和作者一样。话不多说,开始正文。 1. 下载hadoop 本文版本为3.0.0 可以Apache.org官网下载,也可以本人csdn资源处下载https://download.…

数据结构之静态链表

定义 用两个数组实现链表,一个数组存储数据,另一个数组记录当前数据的后继的下标。 示例 数据:data[] {-1, 34, 28, 53, 16, 25, -1, -1, -1, -1} 后继:next[] { 1, 2, 3, 4, 5, -1, -1, -1, -1, -1} 说明 -1: 表示无效值 …

Linux2.基础指令(下)

1.uname -r :输出Linux内核版本信息。 2.linux2.6.*内核默认支持的文件系统有ext3,ext2,ext4,xfs,不支持ufs。 3.linux查看CPU占用的命令:top。 4.题目 5.题目 6.题目 7.重定向 echo "字符串1" :在屏幕上打印字符串1。 echo "字符串1" &g…

C语言督学营(初级阶段)

文章目录 初级阶段1.编程环境搭建、调试C的历史故事写代码快速提升的方法快捷键编程环境 Clion、断点调试(单步调试) 2.数据类型、标准输入输出数据分类printf整型进制转换内存视图ASCII码表计算器 scanf的原理 3.运算符与表达式C语言的13种运算符运算符优先级 4.选择、循环1.选…

【每日算法 数据结构(C++)】—— 01 | 平方值去重统计(解题思路STL法,双指针法、流程图、代码片段)

文章目录 01 | 👑 题目描述02 | 🔋 解题思路STL法双指针法 03 | 🧢 代码片段STL法双指针法 “Success is not final, failure is not fatal: It is the courage to continue that counts.” - Winston Churchill (成功并非终点&am…

Redis【Redis数据类型(String、List、Set、Hash 、Zset)】(二)-全面详解(学习总结---从入门到深化)

目录 Redis数据类型_String set get append strlen setex setnx getrange setrange incr decr incrby/decrby key step mset mget getset Redis数据类型_List lrange lpop/rpop lindex llen lrem linsert lset Redis数据类型_Set smembers sism…

如何在 JavaScript 中处理 HTML 事件?

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言什么是HTML事件Jav…

基于多进程并发-进程通讯之共享内存(shared memmory)

一、什么是共享内存 操作系统对进程内存实现原理: 现代操作系统,对于内存管理,采⽤的是虚拟内存技术,也就是每个进程都有⾃⼰独⽴的虚拟内存空间,不同进程的虚拟内存映射到不同的物理内存中。所以,即使进程…

Python交互式模式的特点和用法

Python交互式(Interactive Mode)是一种Python语言的工作模式,与传统的编写、保存、运行的方式不同,它允许用户直接在控制台窗口中输入和执行Python代码。 Python交互式的特点包括: 实时性:每输入一条语句&a…

黑马程序员前端 Vue3 小兔鲜电商项目——(八)登录页面

文章目录 账号密码路由配置模版代码配置路由跳转 表单校验实现校验要求代码实现统一校验 登录基础业务实现统一错误信息提示Pinia 管理用户数据Pinia 用户数据持久化用户登录状态请求拦截器携带 token退出登录实现Token 失效拦截处理 登录页面的主要功能就是表单校验和登录登出…

【Redis 基础及在 Java 中的应用】

文章目录 Redis 基础及在 Java 中的应用1 Redis 入门1.1 Redis 简介1.2 Redis 下载与安装1.3 Redis服务启动与停止 2 数据类型2.1 介绍2.2 五种常用数据类型 3 常用命令3.1 字符串 string 操作命令3.2 哈希 hash 操作命令3.3 列表 list 操作命令3.4 集合 set 操作命令3.5 有序集…

软件SPI读写W25Q64硬件SPI读写W25Q64

目录 软件SPI读写W25Q64 MySPI W25Q64 主函数 硬件SPI读写W25Q64 软件SPI读写W25Q64 程序整体框架: SPI模块包含通信引脚封装,初始化,SPI三个基本时序单元(起始,终止,交换一个字节) W2…