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存储时间出现不一致的问题
Apr 28 MySQL
MySQL触发器的使用
May 24 MySQL
mysql在项目中怎么选事务隔离级别
May 25 MySQL
Mysql效率优化定位较低sql的两种方式
May 26 MySQL
带你学习MySQL执行计划
May 31 MySQL
MySQL 十大常用字符串函数详解
Jun 30 MySQL
MySQL 用 limit 为什么会影响性能
Sep 15 MySQL
MySQL连接控制插件介绍
Sep 25 MySQL
mysql中varchar类型的日期进行比较、排序等操作的实现
Nov 17 MySQL
浅谈MySql整型索引和字符串索引失效或隐式转换问题
Nov 20 MySQL
MySQL如何快速创建800w条测试数据表
Mar 17 MySQL
MySql数据库 查询时间序列间隔
May 11 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
解析php中如何调用用户自定义函数
2013/08/06 PHP
PHP 正则判断中文UTF-8或GBK的思路及具体实现
2013/11/26 PHP
五款PHP代码重构工具推荐
2014/10/14 PHP
phpstorm编辑器乱码问题解决
2014/12/01 PHP
Yii+upload实现AJAX上传图片的方法
2016/07/13 PHP
Laravel学习教程之路由模块
2017/08/18 PHP
PHP简单实现循环链表功能示例
2017/11/10 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
PHP实现文件上传操作和封装
2020/03/04 PHP
PHP操作Redis常用命令的实例详解
2020/12/23 PHP
javascript String 对象
2008/04/25 Javascript
基于datagrid框架的查询
2013/04/08 Javascript
JQuery-tableDnD 拖拽的基本使用介绍
2013/07/04 Javascript
node.js中的fs.closeSync方法使用说明
2014/12/17 Javascript
angular.bind使用心得
2015/10/26 Javascript
原生JS实现旋转木马式图片轮播插件
2016/04/25 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
灵活使用数组制作图片切换js实现
2016/07/28 Javascript
微信小程序  TLS 版本必须大于等于1.2问题解决
2017/02/22 Javascript
video.js 一个页面同时播放多个视频的实例代码
2018/11/27 Javascript
js+audio实现音乐播放器
2020/09/13 Javascript
python实现将pvr格式转换成pvr.ccz的方法
2015/04/28 Python
Django中的ajax请求
2018/10/19 Python
一步步教你用python的scrapy编写一个爬虫
2019/04/17 Python
Python整数对象实现原理详解
2019/07/01 Python
Python OpenCV图像指定区域裁剪的实现
2019/10/30 Python
使用Python下载抖音各大V视频的思路详解
2021/02/06 Python
利用CSS3实现折角效果实例源码
2016/09/28 HTML / CSS
英国最大的百货公司:Harrods
2016/08/18 全球购物
微软美国官方网站:Microsoft美国
2018/05/10 全球购物
服装设计专业毕业生推荐信
2013/11/09 职场文书
大学新学期计划书
2014/04/28 职场文书
机关副主任个人四风问题整改措施
2014/09/26 职场文书
2014年销售经理工作总结
2014/12/01 职场文书
校本研修个人总结
2015/02/28 职场文书
Nginx域名转发https访问的实现
2021/03/31 Servers