IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL --- 数据库查询 - 聚合函数的使用、聚合查询、分组查询 -> 正文阅读

[大数据]MySQL --- 数据库查询 - 聚合函数的使用、聚合查询、分组查询

聚合函数(统计函数)

SQL 允许对表中的数据进行计算,将表中每一列数据作为一个整体,进行纵向计算。

column 表示字段名,对某一字段进行某些操作

MAX、MIN、COUNT 不会对空值进行计算

COUNT(*) 返回所有列的行数,包含空值

其中 COUNT 函数可用于任何数据类型 (因为它只是记录行数),而 SUM 、AVG 函数都只能对数值类型做计算,MAX 和 MIN 可用于数值、字符串或是日期时间数据类型。

1.统计该企业员工数量?

SELECT COUNT(*) FROM emp;

注意 COUNT() 不会把空值计算在内

SELECT COUNT(mgr) FROM emp;

2.统计该企业员工的平均工资

SELECT AVG(sal) FROM emp;

3.查询该企业员工的最高工资

SELECT MAX(sal) FROM emp;

4.查询该企业员工的最低工资

SELECT MIN(sal) FROM emp;

5.计算所有销售的工资之和

SELECT sal FROM emp WHERE job='salesman';

SELECT SUM(sal) FROM emp WHERE job='salesman';

分组查询

聚合函数实际上就是一些统计函数。

接下来我们来学习分组统计查询。

需要声明一点的是,虽然说统计函数一般是搭配分组查询,但是单独使用的情况一定是有的。例如:在做报表显示的时候基本的分页操作,一定要查询出全部的数据。

那么什么是分组呢?

分组这个概念在生活中其实是很常见的,比如有以下需求:

  • 1.在一个班级之中,要求男女各一组进行辩论赛

  • 2.在公司中,要求每个部门一组进行拔河比赛

对于第一个需求,假设存在学生表,那么在学生表之中一定会存在一个性别字段,性别只可能是男或者女。

而在公司之中,如果要进行部门分组,肯定需要一个部门列的内容存在重复。部门和员工是一对多的关系,一个部门对应多个员工。

分组只对数据有重复的字段才有意义,我们可以先查看 emp 表,找到可以分组的字段职位 job 和部门编号 deptno。

首先员工编号 empno 不能是重复的,如果重复了,就是同一个人,姓名 ename 一般也不会存在重复的

语法

GROUP BY 后面写上要对哪一个字段进行分组

HAVING 对分组之后对分组的数据进行筛选

WHERE 对分组之前的数据进行筛选

HAVING 对分组之后的数据进行筛选

SELECT 分组字段/聚合函数 FROM 表名 [WHERE 条件] GROUP BY 分组字段 [HAVING 分组后条件];

查询需求

1.统计出每个工作岗位的人数,输出所有的工作岗位,然后对它进行分组,多个重复的算是一组里面,最后对每一组统计岗位里面有多少人

SELECT job,COUNT(*) FROM emp GROUP BY job;

2.统计出每种职位的最低和最高工资

-- 统计出每种职位
SELECT job FROM emp GROUP BY job;

SELECT job,MIN(sal),MAX(sal) FROM emp GROUP BY job;

以上两个查询就实现了分组的基本操作,而且这些代码都按照标准格式进行了编写。可是在分组之中,个人认为最麻烦的地方就是在于分组操作的若干限制。

注意事项

1.如果一个查询之中(不存在GROUP BY子句),那么在SELECT子句之中只允许出现统计函数,其他任何字段都不允许出现。

有统计函数的时候,其他任何字段都不允许出现。

#错误的语句
SELECT ename,COUNT(job) FROM emp;
#正确的语句
SELECT COUNT(job) FROM emp;

2.在统计查询之中(存在GROUP BY子句),SELECT子句之中只允许出现统计函数和分组字段(GROUP BY之后定义的字段),其他的任何字段都不允许出现。

#错误的语句
SELECT ename,COUNT(job) FROM emp GROUP BY job;
#正确的语句
SELECT deptno,COUNT(job) FROM emp GROUP BY job;

在以后进行分组操作的时候,本着一个原则:GROUP BY子句之中允许出现的字段才是SELECT子句中允许出现的字段。

查询需求

1.显示不同职位薪资少于1500的人数

-- 显示不同职位
SELECT job FROM emp GROUP BY job;  

-- 显示不同职位的人数 
SELECT job,COUNT(*) FROM emp GROUP BY job;  

-- 显示不同职位薪资少于1500的人数 
SELECT job,COUNT(*) FROM emp WHERE sal<1500 GROUP BY job;

2.多加一个限制条件,只显示人数大于 2 的,其实就是第 1 题的结果再进行一个筛选

SELECT job,COUNT(*) FROM emp WHERE sal<1500 GROUP BY job HAVING COUNT(*)>2;

3.显示非销售人员(salesman)工作名称以及从事同一工作的员工的月工资的总和,并且要满足从事同一工作的员工的月工资合计大于等于5000

SELECT job FROM emp WHERE job!='salesman';

SELECT job,SUM(sal) FROM emp WHERE job!='salesman' GROUP BY job;

SELECT job,SUM(sal) AS total FROM emp WHERE job!='salesman' GROUP BY job HAVING total>=5000;

WHERE和HAVING区别

  • WHERE:是在分组之前使用(可以没有GROUP BY),不允许使用统计函数。

  • HAVING:是在分组之后使用(必须结合GROUP BY),允许使用统计函数。

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-07-05 23:34:26  更:2022-07-05 23:34:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:45:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码