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 相关文章推荐
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
May 06 MySQL
Mysql中存储引擎的区别及比较
Jun 04 MySQL
MySQL 数据恢复的多种方法汇总
Jun 21 MySQL
mysql 数据插入优化方法之concurrent_insert
Jul 01 MySQL
MySQL连接控制插件介绍
Sep 25 MySQL
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
Jan 22 MySQL
MySQL实现配置主从复制项目实践
Mar 31 MySQL
mysql使用instr达到in(字符串)的效果
Apr 03 MySQL
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
Apr 12 MySQL
MySQL表字段数量限制及行大小限制详情
Jul 23 MySQL
mysql数据库如何转移到oracle
Dec 24 MySQL
关于MySQL中explain工具的使用
May 08 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
javascript indexOf函数使用说明
2008/07/03 Javascript
JavaScript 脚本将当地时间转换成其它时区
2009/03/19 Javascript
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
一款Jquery 分页插件的改造方法(服务器端分页)
2011/07/11 Javascript
jquery创建并行对象或者合并对象的实现代码
2012/10/10 Javascript
jquery Mobile入门—多页面切换示例学习
2013/01/08 Javascript
jquery 定位input元素的几种方法小结
2013/07/28 Javascript
javascript使用定时函数实现跳转到某个页面
2013/12/25 Javascript
jquery使用each方法遍历json格式数据实例
2015/05/18 Javascript
Easyui form combobox省市区三级联动
2016/01/13 Javascript
理解JavaScript中Promise的使用
2016/01/18 Javascript
JavaScript自学笔记(必看篇)
2016/06/23 Javascript
jQuery包裹节点用法完整示例
2016/09/13 Javascript
Nodejs中使用phantom将html转为pdf或图片格式的方法
2017/09/18 NodeJs
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
[35:55]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.11
2020/12/13 DOTA
Python求解平方根的方法
2015/03/11 Python
Python 'takes exactly 1 argument (2 given)' Python error
2016/12/13 Python
python3中int(整型)的使用教程
2017/03/23 Python
Python中if elif else及缩进的使用简述
2018/05/31 Python
python3基于OpenCV实现证件照背景替换
2018/07/18 Python
python Flask 装饰器顺序问题解决
2018/08/08 Python
python数据类型之间怎么转换技巧分享
2019/08/20 Python
Django models文件模型变更错误解决
2020/05/11 Python
Python中猜拳游戏与猜筛子游戏的实现方法
2020/09/04 Python
HTML5中的Article和Section元素认识及使用
2013/03/22 HTML / CSS
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
英国电动工具购买网站:Anglia Tool Centre
2017/04/25 全球购物
美国礼品卡交易网站:Cardpool
2018/08/27 全球购物
联想法国官方网站:Lenovo法国
2018/10/18 全球购物
泰国排名第一的家居用品中心:HomePro
2020/11/18 全球购物
遗产继承公证书
2014/04/09 职场文书
电力安全事故反思
2014/04/27 职场文书
对教师的评语
2014/04/28 职场文书
交通事故和解协议书
2015/01/27 职场文书
Golang 并发编程 SingleFlight模式
2022/04/26 Golang