SQL 聚合、分组和排序


Posted in MySQL onNovember 11, 2021

 

一、聚合查询

在访问数据库时,经常要对表中的某列数据进行统计汇总,如求和、最大值、最小值、平均值等,这时就需要使用聚合函数,所谓聚合函数,就是用于汇总的函数,聚合就是将多行汇总为一行,

常见的聚合函数如下:

1、COUNT 函数

count函数用于统计表中记录行数。

例如,计算全部数据的行数:

SELECT COUNT(*) FROM users;

注意: COUNT(*)会得到包含空值NULL的数据行数,若想排除包含NULL的数据行,可以使用count(字段名),会得到NULL之外的数据行数。

SELECT COUNT(user_name) FROM users;

2、SUM 函数

用于计算任意列中数据的和。

例如,计算所有用户的年龄之和:

SELECT sum(age) FROM users;

3、AVG 函数

用于计算任意列中数据的平均值。

例如,计算所有用户的年龄平均值:

SELECT AVG(age) FROM users;

4、MAX 函数和 MIN 函数

MAX函数用于计算任意列中数据的最大值,MIN函数用于计算任意列中数据的最小值。

例如,计算所有用户中的年龄的最大值和最小值:

SELECT MAX(age),MIN(age) FROM users;

注意: MAX函数和MIN函数几乎适用于所有数据类型的列,SUM函数和AVG函数只适用于数值类型的列。

二、分组查询

聚合函数是对表中所有数据进行统计汇总,还可以使用GROUP BY子句先把数据分成若干组,再进行统计汇总。

语法格式:

SELECT <字段名>,... FROM <表名> GROUP BY <字段名>,...;

例如,按照用户所在城市进行分组统计每个城市用户的和:

SELECT city,count(*) FROM users GROUP BY city;
+-------+----------+
| city  | count(*) |
+-------+----------+
| 北京  |       60 |
| 上海  |       45 |
| NULL  |       80 |
| 济南  |       12 |
+-------+----------+

通过结果可以看出,字段为NULL的也会被列为一个分组。如果想要排除在外,可以使用WHERE子句。

SELECT city,count(*) FROM users WHERE city IS NOT NULL GROUP BY city;

三、对聚合结果进行过滤

当我们使用GROUP BY子句分组的时候,有时候就需要对分组的聚合结果进行过滤,我们可能首先会想到使用WHERE子句,其实并不是,而是用HAVING子句,HAVING的作用和WHERE一样,都是起到过滤的作用,只不过WHERE是用于数据行的过滤,而HAVING则用于分组聚合结果的过滤。

例如,按照用户的所在城市进行分组,并且筛选分组中用户数量大于40的组:

SELECT city,COUNT(*) AS num FROM users GROUP BY city HAVING num>40;

再比如:按照用户的所在城市进行分组,并且筛选分组中用户平均年龄小于25的组。

SELECT city,AVG(age) AS avg_age FROM users GROUP BY city HAVING avg_age<25;

1、HAVING 子句的构成要素

HAVING子句中能够使用的3种要素:

  • 常数
  • 聚合函数
  • GROUP BY子句中指定的列名(即聚合键)

四、对查询结果进行排序

SQL查询中可以用到排序,对数据进行升序(ASC)或降序排列(DESC),默认是升序。

语法格式:

SELECT <字段名>,... FROM <表名> ORDER BY <字段名> ASC/DESC,...;

例如:对users表中的记录按照年龄升序排列:

SELECT * FROM users ORDER BY age ASC;

注意: 升序ASC可以省去不写,但是降序DESC必须要写。

例如,对users表中的记录按照年龄降序排列:

SELECT * FROM users ORDER BY age DESC;

1、 指定多个排序键

ORDER BY子句中可以指定多个排序键,例如,对users表中的记录按照年龄降序、注册时间升序排列:

SELECT * FROM student ORDER BY age DESC,register_time ASC;

多个字段排序时中间用“,”隔开。

2、 使用聚合函数排序

 ORDER BY子句中还可以使用聚合函数的结果进行排序。

例如,按照用户的所在城市进行分组,并且按照分组的用户数量进行排序:

SELECT city,COUNT(*) AS num FROM users GROUP BY city ORDER BY num;

到此这篇关于SQL 聚合、分组和排序的文章就介绍到这了,更多相关SQL 聚合、分组和排序内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
mysql 带多个条件的查询方式
Jun 05 MySQL
为什么代码规范要求SQL语句不要过多的join
Jun 23 MySQL
MySQL Shell import_table数据导入的实现
Aug 07 MySQL
MySQL命令无法输入中文问题的解决方式
Aug 30 MySQL
MySQL into_Mysql中replace与replace into用法案例详解
Sep 14 MySQL
MySQL高级进阶sql语句总结大全
Mar 16 MySQL
MySQL多表查询机制
Mar 17 MySQL
MySQL如何快速创建800w条测试数据表
Mar 17 MySQL
mysql 生成连续日期及变量赋值
Mar 20 MySQL
mysql查找连续出现n次以上的数字
May 11 MySQL
MySQL8.0 Undo Tablespace管理详解
Jun 16 MySQL
MySQL下载安装配置详细教程 附下载资源
Sep 23 MySQL
SQL基础的查询语句
Nov 11 #MySQL
MySQL之select、distinct、limit的使用
Nov 11 #MySQL
MySQL表类型 存储引擎 的选择
Nov 11 #MySQL
一文带你探究MySQL中的NULL
Nov 11 #MySQL
mysql函数全面总结
Nov 11 #MySQL
MYSQL 运算符总结
Nov 11 #MySQL
MySQL 数据类型详情
Nov 11 #MySQL
You might like
改造一台复古桌面收音机
2021/03/02 无线电
编写PHP的安全策略
2006/10/09 PHP
深入php多态的实现详解
2013/06/09 PHP
php读取本地json文件的实例
2018/03/07 PHP
swoole_process实现进程池的方法示例
2018/10/29 PHP
Yii框架分页技术实例分析
2019/08/30 PHP
Javascript操纵Cookie实现购物车程序
2007/02/15 Javascript
Bootstrap每天必学之前端开发框架
2015/11/19 Javascript
mvc中form表单提交的三种方式(推荐)
2016/08/10 Javascript
Bootstrap作品展示站点实战项目2
2016/10/14 Javascript
Angularjs之filter过滤器(推荐)
2016/11/27 Javascript
JQuery ZTree使用方法详解
2017/01/07 Javascript
原生js实现打字动画游戏
2017/02/04 Javascript
Angularjs的键盘事件的绑定
2017/07/27 Javascript
js移动端事件基础及常用事件库详解
2017/08/15 Javascript
js 将canvas生成图片保存,或直接保存一张图片的实现方法
2018/01/02 Javascript
浅谈PDF.js使用心得
2018/06/07 Javascript
浅谈vuex actions和mutation的异曲同工
2018/12/13 Javascript
Javascript迭代、递推、穷举、递归常用算法实例讲解
2019/02/01 Javascript
[15:35]教你分分钟做大人:天怒法师
2014/10/30 DOTA
[01:21]DOTA2新纪元-7.0新版本即将开启!
2016/12/11 DOTA
在Mac OS上搭建Python的开发环境
2015/12/24 Python
使用Python的turtle模块画图的方法
2017/11/15 Python
神经网络理论基础及Python实现详解
2017/12/15 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
2018/04/27 Python
python Pandas 读取txt表格的实例
2018/04/29 Python
利用setuptools打包python程序的方法步骤
2020/01/18 Python
python如何通过twisted搭建socket服务
2020/02/03 Python
Silk Therapeutics官网:清洁、抗衰老护肤品
2020/08/12 全球购物
优良学风班总结材料
2014/02/08 职场文书
对标管理实施方案
2014/03/12 职场文书
谢师宴答谢词
2015/01/05 职场文书
前台接待岗位职责
2015/02/03 职场文书
个人求职信格式范文
2015/03/20 职场文书
歌咏比赛主持词
2015/06/29 职场文书
2015年小学远程教育工作总结
2015/07/28 职场文书