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 05 MySQL
Mysql数据库索引面试题(程序员基础技能)
May 31 MySQL
MySQL系列之十五 MySQL常用配置和性能压力测试
Jul 02 MySQL
MySQL图形化管理工具Navicat安装步骤
Dec 04 MySQL
mysql中整数数据类型tinyint详解
Dec 06 MySQL
SQL注入篇学习之盲注/宽字节注入
Mar 03 MySQL
mysql中数据库覆盖导入的几种方式总结
Mar 25 MySQL
MySQL分区以及建索引的方法总结
Apr 13 MySQL
mysql 8.0.27 绿色解压版安装教程及配置方法
Apr 20 MySQL
MySQL如何使备份得数据保持一致
May 02 MySQL
MySQL自定义函数及触发器
Aug 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
使用纯php代码实现页面伪静态的方法
2015/07/25 PHP
遍历指定目录,并存储目录内所有文件属性信息的php代码
2016/10/28 PHP
php中分页及SqlHelper类用法实例
2017/01/12 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
php array_map()函数实例用法
2021/03/03 PHP
使用Jquery实现点击文字后变成文本框且可修改
2013/09/21 Javascript
JavaScrip实现PHP print_r的数功能(三种方法)
2013/11/12 Javascript
纯javascript响应式树形菜单效果
2015/11/10 Javascript
js正则表达式验证表单【完整版】
2017/03/06 Javascript
原生js实现瀑布流布局
2017/03/08 Javascript
详解基于Koa2开发微信二维码扫码支付相关流程
2018/05/16 Javascript
js实现鼠标拖拽缩放div实例代码
2019/03/25 Javascript
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
2019/04/30 Javascript
基于Fixed定位的框选功能的实现代码
2019/05/13 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
[48:44]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS HGT
2014/05/22 DOTA
详解Python的Django框架中Manager方法的使用
2015/07/21 Python
Python找出list中最常出现元素的方法
2016/06/14 Python
深入浅析python with语句简介
2018/04/11 Python
Python中shapefile转换geojson的示例
2019/01/03 Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
2019/11/08 Python
Python内置方法实现字符串的秘钥加解密(推荐)
2019/12/09 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
2020/03/10 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
2020/03/30 Python
pandas DataFrame 数据选取,修改,切片的实现
2020/04/24 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
2021/01/23 Python
考试诚信承诺书
2014/05/23 职场文书
大学生就业求职信
2014/06/12 职场文书
2016年七夕爱情寄语
2015/12/04 职场文书
女性励志书籍推荐
2019/08/19 职场文书
PHP对接阿里云虚拟号的实现(号码隐私保护)
2021/04/06 PHP
python本地文件服务器实例教程
2021/05/02 Python
分析MySQL抛出异常的几种常见解决方式
2021/05/18 MySQL
解决python3安装pandas出错的问题
2021/05/20 Python
MySQL官方导出工具mysqlpump的使用
2021/05/21 MySQL