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 相关文章推荐
多表查询、事务、DCL
Apr 05 MySQL
MySQL 重写查询语句的三种策略
May 10 MySQL
详解Mysql和Oracle之间的误区
May 18 MySQL
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
May 25 MySQL
MySQL中distinct和count(*)的使用方法比较
May 26 MySQL
SQL语法CONSTRAINT约束操作详情
Jan 18 MySQL
分享几个简单MySQL优化小妙招
Mar 31 MySQL
Innodb存储引擎中的后台线程详解
Apr 03 MySQL
pt-archiver 主键自增
Apr 26 MySQL
mysql性能优化以及配置连接参数设置
May 06 MySQL
MySQL中JOIN连接的基本用法实例
Jun 05 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
基于qmail的完整WEBMAIL解决方案安装详解
2006/10/09 PHP
ThinkPHP自动完成中使用函数与回调方法实例
2014/11/29 PHP
php计算多个集合的笛卡尔积实例详解
2017/02/16 PHP
跟着JQuery API学Jquery 之三 筛选
2010/04/09 Javascript
拖动布局之保存布局页面cookies篇
2010/10/29 Javascript
js判断输入是否为数字的具体实例
2013/08/03 Javascript
JS和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
2013/12/14 Javascript
使用javascript实现简单的选项卡切换
2015/01/09 Javascript
JavaScript中字符串分割函数split用法实例
2015/04/07 Javascript
在jQuery中处理XML数据的大致方法
2015/08/14 Javascript
jQuery中inArray方法注意事项分析
2016/01/25 Javascript
js实现对table的增加行和删除行的操作方法
2016/10/13 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
2017/04/07 jQuery
Vue2.0利用vue-resource上传文件到七牛的实例代码
2017/07/28 Javascript
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
jQuery实现判断滚动条滚动到document底部的方法分析
2019/08/27 jQuery
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
Python学习教程之常用的内置函数大全
2017/07/14 Python
对python pandas 画移动平均线的方法详解
2018/11/28 Python
Django之使用celery和NGINX生成静态页面实现性能优化
2019/10/08 Python
Pytorch maxpool的ceil_mode用法
2020/02/18 Python
python实现遍历文件夹图片并重命名
2020/03/23 Python
CSS的pointer-events属性详细介绍(作用和注意事项)
2014/04/23 HTML / CSS
美国购买当代和现代家具网站:MODTEMPO
2018/07/20 全球购物
建筑公司文秘岗位职责
2013/11/29 职场文书
企业业务员岗位职责
2014/03/14 职场文书
医药营销个人求职信
2014/04/12 职场文书
七一讲话心得体会
2014/09/05 职场文书
合伙经营协议书范本
2014/09/13 职场文书
2014年工程部工作总结
2014/11/25 职场文书
外贸采购员岗位职责
2015/04/03 职场文书
2015年度保密工作总结
2015/04/24 职场文书
给学校的建议书400字
2015/09/14 职场文书
使用Redis实现实时排行榜功能
2021/07/02 Redis
Java时间工具类Date的常用处理方法
2022/05/25 Java/Android