DQL-聚合函数
DQL-聚合函数
SQL基本函数,聚合函数对一组值执行计算,并返回单个值,也被称为组函数。
聚合函数对一组值执行计算并返回单一的值。除 COUNT 以外,聚合函数忽略空值,如果COUNT函数的应用对象是一个确定列名,并且该列存在空值,此时COUNT仍会忽略空值。
所有聚合函数都具有确定性。任何时候用一组给定的输入值调用它们时,都返回相同的值。聚合函数可以应用于查询语句的SELECT中,或者HAVING子句中,但不可用于WHERE语句中,因为WHERE是对逐条的行记录进行筛选。
一、聚合函数概述
1.1、什么是聚合函数
SQL基本函数,聚合函数对一组值执行计算,并返回单个值,也被称为组函数。 聚合函数经常与 SELECT 语句的 GROUP BY 子句的HAVING一同使用。
1.2、聚合函数的特点
除了 COUNT 以外,聚合函数忽略空值。
聚合函数经常与 SELECT 语句的 GROUP BY 子句一同使用。
所有聚合函数都具有确定性。任何时候用一组给定的输入值调用它们时,都返回相同的值。
1.3、常用聚合函数
count(字段名):统计总行数
sum(字段名):计算列总和
avg(字段名):求某一列平均值
min(字段名):求某一列的最小值
max(字段名):求某一列的最大值
1.4、聚合函数语法
格式:
select 聚合函数(字段名) from 数据库表名;
二、聚合函数应用
2.1、聚合函数基础应用
案例:
查看学生信息表中通过英语成绩统计所有的学生数
mysql> select count(english) as 学生人数 from students;
+-----+
| 总人数 |
+-----+
| 7 |
+-----+
1 行于数据集 (0.01 秒)
注意:
null的记录是不会统计,如果要想统计null,可以用ifnull(字段名,默认值)
默认值里设置:null用0表示
mysql> select count(ifnull(english,0)) as 总人数 from students;
+-----+
| 总人数 |
+-----+
| 9 |
+-----+
1 行于数据集 (0.02 秒)
除了前面这个方法可以统计学生人数外,我们还可以:
#比较常用的方法
mysql> select count(*) from students;
+----------+
| count(*) |
+----------+
| 9 |
+----------+
1 行于数据集 (0.01 秒)
查看学生信息表中年龄大于19的总人数
mysql> select count(*) from students where age>19;
+----------+
| count(*) |
+----------+
| 2 |
+----------+
1 行于数据集 (0.02 秒)
查看学生信息表中英语成绩的总分
mysql> select sum(english) as 英语总分 from students;
+-------+
| 英语总分 |
+-------+
| 544.5 |
+-------+
1 行于数据集 (0.01 秒)
查看学生信息表中英语成绩的平均分
mysql> select avg(english) as 英语平均分 from students;
+----------+
| 英语平均分 |
+----------+
| 77.78571 |
+----------+
1 行于数据集 (0.01 秒)
查看学生信息表中英语成绩的最高分
mysql> select max(english) as 英语最高分 from students;
+-------+
| 英语最高分 |
+-------+
| 98.5 |
+-------+
1 行于数据集 (0.01 秒)
查看学生信息表中英语成绩的最低分
mysql> select min(english) as 英语最低分 from students;
+-------+
| 英语最低分 |
+-------+
| 50.0 |
+-------+
1 行于数据集 (0.01 秒)
2.2、聚合函数分组应用
案例:
统计学生信息表中男生的人数与女生的人数
mysql> select count(*),sex from students group by sex;
+----------+------+
| count(*) | sex |
+----------+------+
| 6 | 男 |
| 3 | 女 |
+----------+------+
2 行于数据集 (0.01 秒)
统计学生信息表中男生和女生的人数、英语总成绩、数学平均成绩
mysql> select count(*),sex,sum(english),avg(math) from students group by sex;
+----------+------+--------------+-----------+
| count(*) | sex | sum(english) | avg(math) |
+----------+------+--------------+-----------+
| 6 | 男 | 318.5 | 87.25000 |
| 3 | 女 | 226.0 | 82.66667 |
+----------+------+--------------+-----------+
2 行于数据集 (0.01 秒)
统计学生信息表中男生和女生的人数、英语总成绩、数学平均成绩,总人数超过3人显示
mysql> select count(*) as n,sex,sum(english),avg(math) from students group by sex having n>3;
+---+------+--------------+-----------+
| n | sex | sum(english) | avg(math) |
+---+------+--------------+-----------+
| 6 | 男 | 318.5 | 87.25000 |
+---+------+--------------+-----------+
1 行于数据集 (0.02 秒)
三、聚合函数应用扩展
3.1、group_concat
group_concat(字段名)可以作为一个输出字段来使用,表示分组之后,根据分组结果,使用group_concat()来放置每一组的某字段的值的集合。
案例:
统计学生信息表中男生和女生的人数、英语总成绩、数学平均成绩及数学成绩的集合
mysql> select count(*),sex,sum(english),avg(math),group_concat(math) from students group by sex;
+----------+------+--------------+-----------+---------------------+
| count(*) | sex | sum(english) | avg(math) | group_concat(math) |
+----------+------+--------------+-----------+---------------------+
| 3 | 女 | 226.0 | 82.66667 | 80.0,70.0,98.0 |
| 6 | 男 | 318.5 | 87.25000 | 88.0,88.0,85.0,88.0 |
+----------+------+--------------+-----------+---------------------+
2 行于数据集 (0.02 秒)
3.2、with rollup
在最后新增一行,来记录当前列里所有记录的总和
案例:
统计学生信息表中男生和女生的人数、英语总成绩、数学平均成绩及增加显示列的记录总和
mysql> select count(*),sex,sum(english),avg(math) from students group by sex with rollup;
+----------+------+--------------+-----------+
| count(*) | sex | sum(english) | avg(math) |
+----------+------+--------------+-----------+
| 3 | 女 | 226.0 | 82.66667 |
| 6 | 男 | 318.5 | 87.25000 |
| 9 | NULL | 544.5 | 85.28571 |
+----------+------+--------------+-----------+
3 行于数据集 (0.02 秒)
DQL-聚合函数的更多相关文章
- DQL排序查询和DQL聚合函数
DQL:查询语句 排序查询 语法: order by 字句 order by 排序字段1 排序方式1,排序字段2 排序方式2... 排序方式: ASC:升序,默认的 DESC:降序 SELECT * ...
- 数据查询语言DQL 与 内置函数(聚合函数)
数据查询语言DQL 从表中获取符合条件的数据 select select*from表的名字 查询表所有的数据.(select跟from必须一块用 成对出现的) * 表示所有字段,可以换成想要查询的 ...
- 可以这样去理解group by和聚合函数
写在前面的话:用了好久group by,今天早上一觉醒来,突然感觉group by好陌生,总有个筋别不过来,为什么不能够select * from Table group by id,为什么一定不能是 ...
- TSQL 聚合函数忽略NULL值
max,min,sum,avg聚合函数会忽略null值,但不代表聚合函数不返回null值,如果表为空表,或聚合列都是null,则返回null.count 聚合函数忽略null值,如果聚合列都是null ...
- SQL Server 聚合函数算法优化技巧
Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值 ...
- Mongodb学习笔记四(Mongodb聚合函数)
第四章 Mongodb聚合函数 插入 测试数据 ;j<;j++){ for(var i=1;i<3;i++){ var person={ Name:"jack"+i, ...
- sql语句 之聚合函数
聚合分析 在访问数据库时,经常需要对表中的某列数据进行统计分析,如求其最大值.最小值.平均值等.所有这些针对表中一列或者多列数据的分析就称为聚合分析. 在SQL中,可以使用聚合函数快速实现数据的聚 ...
- oracle数据库函数之============‘’分析函数和聚合函数‘’
1分析函数 分析函数根据一组行来进行聚合计算,用于计算完成狙击的累积排名等,分析函数为每组记录返回多个行 rank_number() 查询结果按照次序排列,不存在并列和站位的情况,可以用于做Oracl ...
- ORACLE 自定义聚合函数
用户可以自定义聚合函数 ODCIAggregate,定义了四个聚集函数:初始化.迭代.合并和终止. Initialization is accomplished by the ODCIAggrega ...
- sql 聚合函数、排序方法详解
聚合函数 count,max,min,avg,sum... select count (*) from T_Employee select Max(FSalary) from T_Employee 排 ...
随机推荐
- Docker 03 镜像命令
参考源 https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0 https://www.bilibili.com/vid ...
- 一个非常简单用.NET操作RabbitMQ的方法
RabbitMQ作为一款主流的消息队列工具早已广受欢迎.相比于其它的MQ工具,RabbitMQ支持的语言更多.功能更完善. 本文提供一种市面上最/极简单的使用RabbitMQ的方式(支持.NET/.N ...
- Redis 哨兵机制
概述 由一个或多个 Sentinel(哨兵)实例组成的 Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的 ...
- 操作系统学习笔记5 | 用户级线程 && 内核级线程
在上一部分中,我们了解到操作系统实现多进程图像需要组织.切换.考虑进程之间的影响,组织就是用PCB的队列实现,用到了一些简单的数据结构知识.而本部分重点就是进程之间的切换. 参考资料: 课程:哈工大操 ...
- CF1511G Chips on a Board (倍增)
题面 原题题面 转化方便版题意: 有 n n n 堆石子,第 i i i 堆有 c i ∈ [ 1 , m ] c_i\in [1,m] ci∈[1,m] 个石子,有 q q q 次询问,每次询问给 ...
- Windows API 学习
Windows API学习 以下都是我个人一些理解,笔者不太了解windows开发,如有错误请告知,非常感谢,一切以microsoft官方文档为准. https://docs.microsoft.co ...
- 免杀手法-tcp套字节传递shellcode学习
免杀手法-tcp套字节传递shellcode学习
- Tomcat入门学习笔记
Tomcat服务器 Tomcat使用 Tomcat下载 官网地址:Apache Tomcat - Apache Tomcat 8 Software Downloads 下载Windows 64位版To ...
- django_day10_项目相关
django_day10_项目相关 展示数据的方法 数据对象obj 普通字段 obj.字段名 ====> 数据库该字段的值 带choices参数的 obj.字段名 ====> 数据库该字段 ...
- 小技巧:webpack中@的配置和用法
好家伙, 当我们要各种两个文件去引用别的文件时,一般这么写 import msg from '../../msg.js' 那么如果文件藏得很深,'../'会变得很多,不美观,也不直观 所以我们又又又可 ...