PostgreSQL聚合函数介绍以及分组和排序


Posted in PostgreSQL onApril 12, 2022

聚合函数

用于汇总的函数。

COUNT

COUNT,计算表中的行数(记录数)。

计算全部数据的行数:

SELECT COUNT(*)
  FROM Product;

NULL之外的数据行数:

SELECT COUNT(purchase_price)  FROM Product;

结果如下图。

PostgreSQL聚合函数介绍以及分组和排序

对于一个含NULL的表:

将列名作为参数,得到NULL之外的数据行数;将星号作为参数,得到所有数据的行数(包含NULL)。

SUM、AVG

SUM、AVG函数只能对数值类型的列使用。

SUM,求表中的数值列的数据的和。

SELECT SUM(sale_price)  FROM Product;

purchase_price里面的数据有NULL,四则运算中存在NULL,结果也是NULL,但这里面结果不是NULL。

这是因为,聚合函数以列名为参数,计算的时候会排除NULL的数据。

SELECT SUM(sale_price), SUM(purchase_price)  FROM Product;

PostgreSQL聚合函数介绍以及分组和排序

AVG,求表中的数值列的数据的平均值。

SELECT AVG(sale_price)  FROM Product;

对于列里面数据有NULL的,会事先去掉NULL再计算。如AVG(purchase_price),分母是6而不是8。

SELECT AVG(sale_price), AVG(purchase_price)  FROM Product;

PostgreSQL聚合函数介绍以及分组和排序

MAX、MIN

MAX,求表中任意列数据最大值。

MIN,求表中任意列数据最小值。

SELECT MAX(sale_price), MIN(purchase_price)  FROM Product;
SELECT MAX(regist_date), MIN(regist_date)  FROM Product;

PostgreSQL聚合函数介绍以及分组和排序

聚合函数+DISTINCT

计算去除重复数据后的数据行数:

DISTINCT要写在括号中,目的是在计算行数前先去重。

SELECT COUNT(DISTINCT product_type)  FROM Product;

PostgreSQL聚合函数介绍以及分组和排序

所有的聚合函数的参数中都可以使用DISTINCT。

下面这个SUM(DISTINCT sale_price),先把sale_price里面的数据去重,然后再求和。

SELECT SUM(sale_price), SUM(DISTINCT sale_price)  FROM Product;

GROUP BY

对表分组:前面使用聚合函数,对表中所有数据进行汇总处理。

还可以先把表分成几组,再进行汇总处理。

格式:

SELECT <列名1>,<列名2>,...FROM <表名>GROUP BY <列名1>,<列名2>,...;

按商品种类统计数据:

使用GROUP BY product_type,会按商品种类对表切分。

GROUP BY指定的列,称为聚合键、分组列。

SELECT product_type, COUNT(*)  FROM Product GROUP BY product_type;

按商品种类对表切分,得到以商品种类为分界的三组数据,然后,计算每种商品数据行数。

PostgreSQL聚合函数介绍以及分组和排序

如果聚合键里面含有NULL,也将NULL作为一组特定数据。

SELECT purchase_price, COUNT(*)  FROM Product GROUP BY purchase_price;

PostgreSQL聚合函数介绍以及分组和排序

如果加上WHERE子句,格式如下:

SELECT <列名1>,<列名2>,...FROM <表名>WHEREGROUP BY <列名1>,<列名2>,...;

先根据WHERE子句指定的条件进行筛选,然后再汇总处理。

下面语句的执行顺序:FROM、WHERE、GROUP BY、SELECT。

SELECT purchase_price, COUNT(*)  FROM Product WHERE product_type = '衣服' GROUP BY purchase_price;

PostgreSQL聚合函数介绍以及分组和排序

使用聚合函数和GROUP BY时需要注意:

1.SELECT子句中,只能存在三种元素:常数、聚合函数、GROPU BY子句指定的列名(聚合键)。

使用GROPU BY子句时,SELECT子句中不能出现聚合键之外的列名。

2.GROUP BY子句里面不能使用SELECT子句中定义的别名。

这是因为SQL语句在DBMS内部先执行GROUP BY子句,再执行SELECT子句。执行GROUP BY子句时候,DBMS还不知道别名代表的是啥,因为别名是在SELECT子句里面定义的。

3.GROUP BY子句执行结果的显示顺序是无序的。

4.只有SELECT子句、HAVING子句、ORDER BY子句里面能使用聚合函数。

HAVING

使用GROPU BY子句,得到将表分组后的结果。

使用HAVING子句,指定分组的条件,从分组后的结果里面选取特定的组。

格式:

SELECT <列名1>,<列名2>,...FROM <表名>WHEREGROUP BY <列名1>,<列名2>,...;HAVING <分组结果对应的条件>

下面这个,选出包含两行数据的组。

SELECT product_type, COUNT(*)  FROM Product GROUP BY product_typeHAVING COUNT(*) = 2;

PostgreSQL聚合函数介绍以及分组和排序

下面这个,选出平均值>=2500的组。

SELECT product_type, AVG(sale_price)  FROM Product GROUP BY product_typeHAVING AVG(sale_price) >= 2500;

PostgreSQL聚合函数介绍以及分组和排序

HAVING子句中,能用的三种元素:常数、聚合函数、GROPU BY子句指定的列名(聚合键)。

聚合键所对应的一些条件,可以写在HAVING子句中,也可写在WHERE子句中。

下面两段代码结果都一样。

HAVING子句用来指定组的条件。WHERE子句用来指定数据行的条件。聚合键所对应的一些条件还是写在WHERE子句中好点。

SELECT product_type, COUNT(*)  FROM Product GROUP BY product_typeHAVING product_type = '衣服';
SELECT product_type, COUNT(*)  FROM ProductWHERE product_type = '衣服' GROUP BY product_type;

PostgreSQL聚合函数介绍以及分组和排序

ORDER BY

使用ORDER BY子句,可以对查询结果进行排序。

格式:

SELECT <列名1>,<列名2>,...FROM <表名>ORDER BY <排序基准列1>,<排序基准列2>,...;

ORDER BY子句写在SELECT语句末尾。

ORDER BY子句里面的列名称为排序键。

使用升序排列,使用ASC关键字,省略这个关键字,默认也是升序排列。

SELECT product_id, product_name, sale_price, purchase_price  FROM ProductORDER BY sale_price;

上面是升序排列,如果想要降序排列,使用DESC关键字。

SELECT product_id, product_name, sale_price, purchase_price  FROM ProductORDER BY sale_price DESC;

PostgreSQL聚合函数介绍以及分组和排序

上面的排序,sale_price=500的有两个数据,这两个数据的顺序是随机的。

可以再添加一个排序键,对这两个数据排序。

下面就实现了,价格相同时,按照商品编号升序排序。

多个排序键时,优先使用左边的键,该列存在相同值,再参考右边的键。

SELECT product_id, product_name, sale_price, purchase_price  FROM ProductORDER BY sale_price, product_id;

PostgreSQL聚合函数介绍以及分组和排序

如果,排序键里面有数据是NULL,NULL会在结果的开头或结尾显示。

SELECT product_id, product_name, sale_price, purchase_price  FROM ProductORDER BY purchase_price;

PostgreSQL聚合函数介绍以及分组和排序

ORDER BY子句里面可以使用SELECT子句中定义的别名。

这是由SQL语句在DBMS内部执行顺序决定的。SELECT子句执行顺序在ORDER BY前,GROPU BY后。

FROM、WHERE、GROPU BY、HAVING、SELECT、ORDER BY

SELECT product_id AS id, product_name, sale_price AS sp, purchase_price  FROM ProductORDER BY sp, id;

PostgreSQL聚合函数介绍以及分组和排序

ORDER BY子句可以使用在表里,但不在SELECT子句里的列。

SELECT product_name, sale_price, purchase_price  FROM ProductORDER BY product_id;

ORDER BY子句里面可以使用聚合函数。

SELECT product_type, COUNT(*)  FROM Product GROUP BY product_typeORDER BY COUNT(*);
PostgreSQL 相关文章推荐
自定义函数实现单词排序并运用于PostgreSQL(实现代码)
Apr 22 PostgreSQL
postgresql使用filter进行多维度聚合的解决方法
Jul 16 PostgreSQL
PostgreSQL解析URL的方法
Aug 02 PostgreSQL
基于PostgreSQL/openGauss 的分布式数据库解决方案
Dec 06 PostgreSQL
使用PostGIS完成两点间的河流轨迹及流经长度的计算(推荐)
Jan 18 PostgreSQL
PostgreSQL并行计算算法及参数强制并行度设置方法
Apr 07 PostgreSQL
PostgreSQL数据库创建并使用视图以及子查询
Apr 11 PostgreSQL
PostgreSQL 插入INSERT、删除DELETE、更新UPDATE、事务transaction
Apr 12 PostgreSQL
PostgreSQL常用字符串分割函数整理汇总
Jul 07 PostgreSQL
PostgreSQL 插入INSERT、删除DELETE、更新UPDATE、事务transaction
PostgreSQL数据库创建并使用视图以及子查询
PostgreSQL并行计算算法及参数强制并行度设置方法
Apr 07 #PostgreSQL
PostgreSQL并行计算算法及参数强制并行度设置方法
Apr 06 #PostgreSQL
PostgreSQL事务回卷实战案例详析
Mar 25 #PostgreSQL
Oracle配置dblink访问PostgreSQL的操作方法
Rust 连接 PostgreSQL 数据库的详细过程
Jan 22 #PostgreSQL
You might like
PHP下用rmdir实现删除目录的三种方法小结
2008/04/20 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
2019/12/12 PHP
解放web程序员的输入验证
2006/10/06 Javascript
javascript 学习之旅 (1)
2009/02/05 Javascript
深入理解JavaScript系列(1) 编写高质量JavaScript代码的基本要点
2012/01/15 Javascript
jQuery Ajax异步处理Json数据详解
2013/11/05 Javascript
JS实现图片产生波纹一样flash效果的方法
2015/02/27 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
2015/02/28 Javascript
快速解决Vue项目在IE浏览器中显示空白的问题
2018/09/04 Javascript
vue中多个倒计时实现代码实例
2019/03/27 Javascript
vue微信分享的实现(在当前页面分享其他页面)
2019/04/16 Javascript
Vue+Element实现表格编辑、删除、以及新增行的最优方法
2019/05/28 Javascript
js实现百度淘宝搜索功能
2020/02/17 Javascript
微信小程序实现聊天室
2020/08/21 Javascript
基于vue+echarts数据可视化大屏展示的实现
2020/12/25 Vue.js
[04:28]2014DOTA2国际邀请赛 采访小兔子LGD挺进钥匙体育馆
2014/07/14 DOTA
python实现bucket排序算法实例分析
2015/05/04 Python
python进程管理工具supervisor的安装与使用教程
2017/09/05 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
2018/02/08 Python
python实现单链表中删除倒数第K个节点的方法
2018/09/28 Python
Python中filter与lambda的结合使用详解
2019/12/24 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
2020/09/25 Python
python 实现的车牌识别项目
2021/01/25 Python
HTML5地理定位与第三方工具百度地图的应用
2016/11/17 HTML / CSS
瑰珀翠美国官网:Crabtree & Evelyn美国
2016/11/29 全球购物
加拿大床上用品、家居装饰、厨房和浴室产品购物网站:Linen Chest
2018/06/05 全球购物
英国女鞋购物网站:Moda in Pelle
2019/02/18 全球购物
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
法学专业毕业生自荐信范文
2013/12/18 职场文书
保证书范文大全
2014/04/28 职场文书
设备管理实施方案
2014/05/31 职场文书
2014年护士工作总结范文
2014/11/11 职场文书
幼儿园中秋节活动总结
2015/03/23 职场文书
惹女朋友生气检讨书
2015/05/06 职场文书
PHP 技巧 * SVG 保存为图片(分享图生成)
2021/04/02 PHP
一行Python命令实现批量加水印
2022/04/07 Python