第8章:聚合函数

news2024/11/15 19:48:38

目录

 一、常见的聚合函数

 二、GROUP BY 的使用

 三、HAVING 的使用,过滤数据

 四、SQL底层的执行原理

 五、练习


一、常见的聚合函数

1.概念

聚合函数作用于一组数据,并对一组数据返回一个值。

 2.聚合函数的类型

AVG(),SUM(),MAX(),MIN(),COUNT()

3. AVG(),SUM():数值

①查询员工表的平均工资以及员工表的总工资

select avg(salary) "avg",sum(salary) "sum"
from employees

②对于字符串结果是0

4. MAX(),MIN():数值,字符串,日期

①查询员工表的最高的工资和最低的工资

select max(salary) "max", min(salary) "min"
from employees

②对于字符串来说,可以查找到首字母最大的名字,最小的名字

select max(last_name) "max", min(last_name) "min"
from employees

5. COUNT()

①作用:计算指定的字段的个数

②count(*),count(1),count(字段名)的区别?

  • count(*)和count(1)能查询表中有多少条记录。
  • count(字段名)查询该字段名下非空的记录。
  • SELECT count(*),count(1),count(commission_pct)
    FROM employees
    

     6.查询员工表的平均奖金率。

  • avg(commission_pct)=sum(commission_pct)/count(commission_pct) 只计算员工有奖金的,除以有奖金的总人数。所以avg(commission_pct)是错误的。应该除以总人数SUM(commission_pct)/count(*)正确

  • 7. count(*),count(1),count(非空字段名)哪个效率高。

  • ①如果使用的MyISAM的存储引擎,三者效率相同都是O(1) 引擎内部有一计数器在维护着行数

    ②如果使用的InnoDB的存储引擎,三个效率count(*) = count(1) > count(非空字段名)

    count(*),count(1)直接读行数,复杂度是O(n), innodb真的要去数一遍。但好于具体的count(列名)

  • 二、GROUP BY 的使用

  • 1.基本使用

  •  2.求员工表各个部门的平均工资,每个部门的总工资

  • SELECT department_id,AVG(salary),SUM(salary)
    FROM employees
    GROUP BY department_id
    

  • 3.查询每个部门的各个工种的平均工资,总工资

  •  

    SELECT department_id,job_id,AVG(salary),SUM(salary)
    FROM employees
    GROUP BY department_id,job_id
    或
    SELECT department_id,job_id,AVG(salary),SUM(salary)
    FROM employees
    GROUP BY job_id,department_id
    

     4.select出现的分组的字段必须在GROUP BY中

  • SELECT department_id,job_id,AVG(salary),SUM(salary)

    FROM employees

    GROUP BY department_id

    错误的!

  • 5. WITH ROLLUP计算查询出的所有记录的总和,不能跟order by一起使用

  • SELECT department_id,AVG(salary)
    FROM employees
    GROUP BY department_id WITH ROLLUP
    

  •  三、HAVING 的使用,过滤数据

 

 条件:

  • 行已经被分组;
  • 使用了聚合函数;
  • 满足HAVING 子句中条件的分组将被显示;
  • HAVING 不能单独使用,必须要跟 GROUP BY 一起使用;

1.查询各个部门中最高的工资比10000高的部门有哪些

SELECT department_id, MAX(salary) 
FROM employees 
GROUP BY department_id HAVING MAX(salary)>10000 ;

2.过滤条件使用聚合函数(max)必须使用having来替换where

3.查询部门id为10,20,30,40这4个部门中最高工资比10000高的部门信息

方式1(效率高)

select department_id,max(salary)
from employees
where department_id in (10,20,30,40)
group by department_id having max(salary)>10000

方式2

select department_id,max(salary)
from employees 
group by department_id having max(salary)>10000 and department_id in (10,20,30,40)

 4.where和having的对比

①过滤条件有聚合函数用having

②过滤条件没有聚合函数having和where都可以。但是推荐where。因为having是先连接后筛选,where是先筛选后连接。Where效率高。

 四、SQL底层的执行原理

1.select语句的完整结构

select 字段名
from 表名
left/right join 表2 on 多表的连接条件
where 查询条件
group by 分组字段  having 查询条件
order by 排序字段 asc/desc
limit 位置,偏移量

2.sql语句执行顺序

 五、练习

#1.where子句可否使用组函数进行过滤?

不能,组函数是使用having过滤

#2.查询公司员工工资的最大值,最小值,平均值,总和

select max(salary),min(salary),avg(salary),sum(salary)
from employees

#3.查询各job_id的员工工资的最大值,最小值,平均值,总和

select job_id,max(salary),min(salary),avg(salary),sum(salary)
from employees
group by job_id

#4.查询各个job_id的员工人数

select job_id,count(*)
from employees
group by job_id

# 5.查询员工最高工资和最低工资的差距 (DIFFERENCE)

select max(salary)-min(salary) "DIFFERENCE"
from employees

# 6.查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内

select manager_id,min(salary)
from employees
where manager_id is not null
group by manager_id having min(salary)>=6000

 # 7.查询所有部门的名字,location_id,员工数量和平均工资,并按平均工资降序

select d.department_name,d.location_id,count(employee_id) "pepole_count",avg(salary)
from employees e
right join departments d on e.department_id = d.department_id
group by department_name,location_id
order by avg(salary) desc

 #8.查询每个工种、每个部门的部门名、工种名和最低工资

select d.department_name,e.job_id,min(salary)
from employees e
right join departments d on e.department_id = d.department_id
group by d.department_name,e.job_id

 

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

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

相关文章

【Spring篇】AOP

🍓系列专栏:Spring系列专栏 🍉个人主页:个人主页 目录 一、AOP简介 1.什么是AOP? 2.AOP作用 3.AOP核心概念 二、AOP入门案例 1.需求分析 2.思路分析 3.环境准备 4.AOP实现步骤 三、AOP工作流程 1.AOP工作流程 2.AOP核心概念 四、AOP配置管…

Python小姿势 - 1. Python的设计理念

Python的设计理念 Python的设计理念是“优雅”、“明确”、“简单”。 优雅:Python代码风格优美,语法简洁明了,代码可读性高,易于理解和维护。 明确:Python语言规范清晰,标准库丰富,可用于开发各…

第五章 作业(123)【编译原理】

第五章 作业【编译原理】 前言推荐第五章 作业123 随堂练习课前热身04-17随堂练习04-17课前热身04-24 最后 前言 2023-5-3 22:12:46 以下内容源自《【编译原理】》 仅供学习交流使用 推荐 第四章 作业(123)【编译原理】 第五章 作业 1 1.令文法G为…

医生的百科词条怎么创建?医生的百科词条创建技巧值得你收藏

医生是医学领域中的专业人员,主要负责诊断、治疗和预防疾病。在现代社会中,医生的角色越来越重要,是社会中不可或缺的职业之一。 而随着互联网的发展,百度百科已成为人们获取信息的重要途径,医生想要提高自己的知名度和…

SpringBoot项目简单入门

一、创建项目 1、选择Spring Initializr 2、为了提高项目构建效率,可以尝试修改阿里脚手架,地址如下: https://start.aliyun.com 3、点击下一步 4、选择Web与spring Web,然后点击完成开始项目构建 5、项目构建完成如图所示 二、…

Linux基础知识—Linux

文章目录 1.认识Linux2.常见命令2.1ls2.2pwd2.3cd2.4touch2.5mkdir2.6rm2.7cp2.8mv2.9man2.10date2.11grep2.12ps2.13netstat 3.文件内容的操作3.1cat3.2vim3.3less3.4head3.5tail3.6管道|3.7重定向 4.管理软件4.1yum(在线的方式管理)4.2rpm(…

OnlineJudge-负载均衡式在线OJ

关于个人项目是在找实习以及参加秋招非常重要的简历内容,今天博主来介绍一下自己的一个项目。 开发环境:CentOS7、Makefile、g、vscode、MySQL Workbench 所用技术:C STL 标准库、Boost 准标准库(字符串切割)、cpp-httplib 第三方开源网络库 …

数据结构(C语言):两个字符串比较大小

一、一个小插曲 在写这篇文章之前,作者想先和大家分享一个小故事。如果你不想看这个小故事的话,可以直接跳到第二点哦。 为了锻炼自己的编码能力,平时作业和实验题的代码我都是不看书、不看老师的PPT,按照自己的思路一行一行敲出…

【STM32CubeMX】F103RTC时钟

前言 本文记录了我学习STM32CubeMX的过程,方便以后回忆。我们使用的开发板是基于STM32F103C6T6的。本章记录了RTC时钟的基础配置。下文调试时用到的串口来查看,不过串口的配置省略了。 步骤 实验目标:基于RTC时钟,查看它的秒计时…

Mac电脑配置李沐深度学习环境[pytorch版本]使用vscode

文章目录 第一步 M1芯片安装Pytorch环境安装Miniforge创建虚拟环境安装Pytorch 第二步 下载李沐Jupyter文件第三步 配置vscode参考 第一步 M1芯片安装Pytorch环境 安装Miniforge Mac打开终端(Mac电脑如何启动终端?打开启动台,搜索终端即可&…

网络安全合规-数据分类分级标准汇编

今天主要学习讲解的是网络安全合规-数据分类分级标准汇编。 作为数据安全治理的前期首要工作-分类分级,而分类分级的开展工作又是根据相关标准开展的,建立数据安全防护体系的第一步就是梳理数据资产进行分类分级。只有做好分类分级工作,对不同…

迈向多模态AGI之开放世界目标检测 | 人工智能

作者:王斌 谢春宇 冷大炜 引言 目标检测是计算机视觉中的一个非常重要的基础任务,与常见的的图像分类/识别任务不同,目标检测需要模型在给出目标的类别之上,进一步给出目标的位置和大小信息,在CV三大任务(识…

GIMP制作艺术字技巧

GIMP下载官网 https://www.gimp.org/downloads/ 我使用的版本 2.10.32 字体下载 https://ziyouziti.com/index-index-all.html 下载解压之后会有otf、ttf等字体文件,需要拷贝到gimp当前用户目录 C:\Users\用户名\AppData\Roaming\GIMP\2.10\fonts GIMP绘制字…

分布式医疗云平台【项目简介、适合对象、技术选型、项目的核心功能模块 、模块设计及功能演示】(一)-全面详解(学习总结---从入门到深化)

目录 分布式医疗云平台 一、项目简介 二、适合对象 三、技术选型 四、项目的核心功能模块 五、项目特色 六、模块设计及功能演示 分布式医疗云平台 一、项目简介 分布式医疗云平台系统是以完整的基层医疗机构信息化解决方案为出发点,打造链接诊所、医生、…

【P7】JMeter 计数器

&#xff08;1&#xff09;、测试计划右键 <<< 添加 <<< 配置元件 <<< 计数器 Starting value&#xff1a;1 递增&#xff1a;1 Maximum value&#xff1a;9999 数字格式&#xff1a;var_0000 引用名称&#xff1a;var &#xff08;2&#xf…

web集群,部署jpress应用

1.静态网页与动态网页的区别 静态网页&#xff1a; &#xff08;1&#xff09;请求响应信息&#xff0c;发送给客户端进行处理&#xff0c;由浏览器进行解析&#xff0c;显示页面称为静态页面。在网站设计中&#xff0c;纯粹html格式的网页&#xff08;包含图片&#xff0c;视…

學習日記,java与写题目

开篇来个每日一题 1419. 数青蛙 难度中等185收藏分享切换为英文接收动态反馈 给你一个字符串 croakOfFrogs&#xff0c;它表示不同青蛙发出的蛙鸣声&#xff08;字符串 "croak" &#xff09;的组合。由于同一时间可以有多只青蛙呱呱作响&#xff0c;所以 croakOfF…

冯诺依曼+OS+进程+进程状态

索引 一.冯诺依曼理解二.OS 进程的初步认识1.什么是进程&#xff1f;2.如何查看进程3.父进程与子进程4.进程状态1.S阻塞态R运行态2.D阻塞&#xff08;不可中断&#xff09;3.Z僵尸状态andX死亡状态4.孤儿进程5&#xff0c;进程死亡之后OS做了什么五.状态总结&#xff1a; 一.冯…

数据库系统工程师 —— 第六章 数据库技术基础

文章目录 &#x1f4c2; 第六章、数据库技术基础 &#x1f4c1; 6.1 基本概念 &#x1f4d6; 6.1.1 数据库与数据库管理系统 &#x1f4d6; 6.1.2 数据库技术的发展 &#x1f4d6; 6.1.3 DBMS的功能和特点 &#x1f4d6; 6.1.4 数据库系统的体系结构 &#x1f4d6; 6.1.5 数据库…

极致鸿蒙——华为MatePad系列安装AidLux,一个自带vscode的Python编译环境

看着刚刚人入手的华为鸿蒙系统MatePad11平板&#xff0c;是如此的美轮美奂&#xff0c;但是总感觉少了点什么&#xff0c;少了点什么呢&#xff1f;是编程环境&#xff0c;我爱MatePad&#xff0c;也爱编程&#xff0c;那如果可以在MatePad上编程&#xff0c;会发生什么&#x…