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-聚合函数的更多相关文章

  1. DQL排序查询和DQL聚合函数

    DQL:查询语句 排序查询 语法: order by 字句 order by 排序字段1 排序方式1,排序字段2 排序方式2... 排序方式: ASC:升序,默认的 DESC:降序 SELECT * ...

  2. 数据查询语言DQL 与 内置函数(聚合函数)

    数据查询语言DQL 从表中获取符合条件的数据 select select*from表的名字   查询表所有的数据.(select跟from必须一块用 成对出现的) * 表示所有字段,可以换成想要查询的 ...

  3. 可以这样去理解group by和聚合函数

    写在前面的话:用了好久group by,今天早上一觉醒来,突然感觉group by好陌生,总有个筋别不过来,为什么不能够select * from Table group by id,为什么一定不能是 ...

  4. TSQL 聚合函数忽略NULL值

    max,min,sum,avg聚合函数会忽略null值,但不代表聚合函数不返回null值,如果表为空表,或聚合列都是null,则返回null.count 聚合函数忽略null值,如果聚合列都是null ...

  5. SQL Server 聚合函数算法优化技巧

    Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值 ...

  6. Mongodb学习笔记四(Mongodb聚合函数)

    第四章 Mongodb聚合函数 插入 测试数据 ;j<;j++){ for(var i=1;i<3;i++){ var person={ Name:"jack"+i, ...

  7. sql语句 之聚合函数

      聚合分析 在访问数据库时,经常需要对表中的某列数据进行统计分析,如求其最大值.最小值.平均值等.所有这些针对表中一列或者多列数据的分析就称为聚合分析. 在SQL中,可以使用聚合函数快速实现数据的聚 ...

  8. oracle数据库函数之============‘’分析函数和聚合函数‘’

    1分析函数 分析函数根据一组行来进行聚合计算,用于计算完成狙击的累积排名等,分析函数为每组记录返回多个行 rank_number() 查询结果按照次序排列,不存在并列和站位的情况,可以用于做Oracl ...

  9. ORACLE 自定义聚合函数

    用户可以自定义聚合函数  ODCIAggregate,定义了四个聚集函数:初始化.迭代.合并和终止. Initialization is accomplished by the ODCIAggrega ...

  10. sql 聚合函数、排序方法详解

    聚合函数 count,max,min,avg,sum... select count (*) from T_Employee select Max(FSalary) from T_Employee 排 ...

随机推荐

  1. C++ 遍历磁盘文件 非递归方法 和递归方法

    1: 非递归方法:  一起学习 寻找快乐 // File Name: CSearch.h #pragma once #include <vector> #include <atlst ...

  2. 论文翻译:2021_A New Real-Time Noise Suppression Algorithm for Far-Field Speech Communication Based on Recurrent Neural Network

    论文地址:一种新的基于循环神经网络的远场语音通信实时噪声抑制算法 引用格式:Chen B, Zhou Y, Ma Y, et al. A New Real-Time Noise Suppression ...

  3. 硬件IIC驱动原理

    1.IIC物理层 IIC通信属于同步半双工通信,IIC总线由两根信号线组成.一根是数据线SDA,一根是时钟线SCL,时钟线只能由主机发送给从机,数据线可以双向进行通信,总线上可挂载多个设备,挂载数量受 ...

  4. 【lwip】06-网络接口层分析

    目录 前言 6.1 概念引入 6.2 网络接口层数据概念流图 6.3 网卡收包程序流图 6.4 网卡数据结构 6.4.1 struct netif源码 6.4.2 字段分析 6.4.2.1 网卡链表 ...

  5. Linux虚拟机 RHEL8.0安装步骤

    一. 创建空白虚拟机 1.打开 VMware 虚拟机软件依次选择新建虚拟机并选择选择"自定义" 自定义功能更加全面,典型就是比较简单的配置 2.选择对应的 VMware 版本,此则 ...

  6. 闭包 与 js内存管理

    参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Memory_Management            https://blog ...

  7. KingbaseES的SQL语句-CTE递归

    背景 从上下级关系表中,任意一个节点数据出发,可以获得该节点的上级或下级.CTE的递归语法,或者 connect by 与 start with的 查询语法,能够实现这个需求. 当我们需要制作上下级关 ...

  8. P8539 「Wdoi-2」来自地上的支援 题解

    思路 根据题意,如果每次询问选中的为第 \(x\) 个数,那么前 \(x-1\) 次操作一定不会选中第 \(x\) 个数.(感觉在说废话.) 同样,因为第 \(x\) 个数必须被选中 \(k\) 次, ...

  9. Markdowm基础语法的使用(typora)

    Mackdown学习 一级标题:一个#加空格 回车 二级标题:两个#加空格 回车 以此类推... 一级标题(Ctrl+1) 二级标题(Ctrl+2) 三级标题(Ctrl+3) 四级标题(Ctrl+4) ...

  10. rabbitmq的内存节点和磁盘节点

    RabbitMQ集群里有内存节点与磁盘节点之分. 所谓内存节点,就是将元数据(metadata)都放在内存里,磁盘节点就是放在磁盘上.(内存节点将全部的队列,交换器,绑定关系,用户,权限,和vhost ...