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 10 MySQL
MySQL 8.0 之不可见列的基本操作
May 20 MySQL
简单了解 MySQL 中相关的锁
May 25 MySQL
解决Navicat for Mysql连接报错1251的问题(连接失败)
May 27 MySQL
MySQL的Query Cache图文详解
Jul 01 MySQL
Centos7中MySQL数据库使用mysqldump进行每日自动备份的编写
Aug 02 MySQL
深入解析MySQL索引数据结构
Oct 16 MySQL
MySQL多表查询机制
Mar 17 MySQL
浅谈redis的过期时间设置和过期删除机制
Mar 18 MySQL
MySQL派生表联表查询实战过程
Mar 20 MySQL
解决MySQL报“too many connections“错误
Apr 19 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实现的sqlite数据库连接类
2014/12/12 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
2015/08/18 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
Array.prototype.slice.apply的使用方法
2010/03/17 Javascript
一些有用的JavaScript和jQuery的片段分享
2011/08/23 Javascript
Javascript面向对象编程
2012/03/18 Javascript
JS事件Event元素(兼容IE,Firefox,Chorme)
2012/11/01 Javascript
Nodejs学习笔记之NET模块
2015/01/13 NodeJs
微信支付如何实现内置浏览器的H5页面支付
2015/09/25 Javascript
JS实现的倒计时效果实例(2则实例)
2015/12/23 Javascript
纯js实现瀑布流布局及ajax动态新增数据
2016/04/07 Javascript
url传递的参数值中包含&amp;时,url自动截断问题的解决方法
2016/08/02 Javascript
Nodejs实现短信验证码功能
2017/02/09 NodeJs
jQuery中的on与bind绑定事件区别实例详解
2017/02/28 Javascript
Angular2.js实现表单验证详解
2017/06/23 Javascript
jquery ztree实现右键收藏功能
2017/11/20 jQuery
JavaScript实现区块链
2018/03/14 Javascript
详解关于vue2.0工程发布上线操作步骤
2018/09/27 Javascript
Vue中CSS动画原理的实现
2019/02/13 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
2019/04/28 Javascript
Javascript地址引用代码实例解析
2020/02/25 Javascript
如何在vue中使用百度地图添加自定义覆盖物(水波纹)
2020/11/03 Javascript
python插入数据到列表的方法
2015/04/30 Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
2015/08/10 Python
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
Python3.5 创建文件的简单实例
2018/04/26 Python
python扫描线填充算法详解
2020/02/19 Python
Python常用GUI框架原理解析汇总
2020/12/07 Python
canvas之自定义头像功能实现代码示例
2017/09/29 HTML / CSS
微软加拿大官方网站:Microsoft Canada
2019/04/28 全球购物
应届生船舶驾驶求职信
2013/10/19 职场文书
自我推荐书
2013/12/04 职场文书
学习党的群众路线实践活动思想汇报
2014/09/12 职场文书
财产分割协议书范本
2014/11/03 职场文书
2014年青年志愿者工作总结
2014/12/09 职场文书
《七月的天山》教学反思
2016/02/19 职场文书