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 Innodb关键特性之插入缓冲(insert buffer)
Apr 08 MySQL
MySQL之高可用集群部署及故障切换实现
Apr 22 MySQL
MySql存储过程之逻辑判断和条件控制
May 26 MySQL
MySQL连接查询你真的学会了吗?
Jun 02 MySQL
Mysql 如何实现多张无关联表查询数据并分页
Jun 05 MySQL
如何使用分区处理MySQL的亿级数据优化
Jun 18 MySQL
MySQL 数据恢复的多种方法汇总
Jun 21 MySQL
MySQL如何使用使用Xtrabackup进行备份和恢复
Jun 21 MySQL
MySQL笔记 —SQL运算符
Jan 18 MySQL
MySql分区类型及创建分区的方法
Apr 13 MySQL
mysql sock文件存储了什么信息
Jul 15 MySQL
DQL数据查询语句使用示例
Dec 24 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
屏蔽浏览器缓存另类方法
2006/10/09 PHP
为PHP初学者的8点有效建议
2010/11/20 PHP
在项目中寻找代码的坏命名
2012/07/14 PHP
php中通过数组进行高效随机抽取指定条记录的算法
2013/09/09 PHP
解析PHP强制转换类型及远程管理插件的安全隐患
2014/06/30 PHP
PHP中变量引用与变量销毁机制分析
2014/11/15 PHP
php利用事务处理转账问题
2015/04/22 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
2018/05/12 PHP
Extjs EditorGridPanel中ComboBox列的显示问题
2011/07/04 Javascript
关于 文本框默认值 的操作js代码
2012/01/12 Javascript
关于js中alert弹出窗口文本换行问题简单详细说明
2012/12/11 Javascript
Javascript delete 引用类型对象
2013/11/01 Javascript
JavaScript的21条基本知识点
2014/03/04 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
js编写贪吃蛇的小游戏
2020/08/24 Javascript
浏览器兼容的JS写法总结
2016/04/27 Javascript
JS 面向对象之继承---多种组合继承详解
2016/07/10 Javascript
jQuery数组处理函数整理
2016/08/03 Javascript
JS实现图片手风琴效果
2020/04/17 Javascript
集合Bootstrap自定义confirm提示效果
2017/09/19 Javascript
XMLHttpRequest对象_Ajax异步请求重点(推荐)
2017/09/28 Javascript
Node4-5静态资源服务器实战以及优化压缩文件实例内容
2019/08/29 Javascript
vue结合el-upload实现腾讯云视频上传功能
2020/07/01 Javascript
python实现俄罗斯方块游戏
2020/03/25 Python
Tensorflow使用支持向量机拟合线性回归
2018/09/07 Python
5款Python程序员高频使用开发工具推荐
2019/04/10 Python
详解PyCharm+QTDesigner+PyUIC使用教程
2019/06/13 Python
Python提取转移文件夹内所有.jpg文件并查看每一帧的方法
2019/06/27 Python
Python 日志logging模块用法简单示例
2019/10/18 Python
浅谈tensorflow之内存暴涨问题
2020/02/05 Python
希腊品牌鞋类销售网站:epapoutsia.gr
2020/03/18 全球购物
韩国乐天网上商城:Lotte iMall
2021/02/03 全球购物
汽修专业学生自我鉴定
2013/11/16 职场文书
医药营销个人求职信范文
2014/02/07 职场文书
个人查摆剖析材料
2014/10/04 职场文书
见习报告格式范文
2014/11/08 职场文书