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将数据加载到buffer cache中操作方法
Apr 16 PostgreSQL
postgresql无序uuid性能测试及对数据库的影响
Jun 11 PostgreSQL
浅谈PostgreSQL表分区的三种方式
Jun 29 PostgreSQL
PostgreSQL解析URL的方法
Aug 02 PostgreSQL
postgresql 删除重复数据案例详解
Aug 02 PostgreSQL
PostgreSQL13基于流复制搭建后备服务器的方法
Jan 18 PostgreSQL
PostgreSQL事务回卷实战案例详析
Mar 25 PostgreSQL
PostgreSQL 插入INSERT、删除DELETE、更新UPDATE、事务transaction
Apr 12 PostgreSQL
PostgreSQL数据库去除重复数据和运算符的基本查询操作
Apr 12 PostgreSQL
PostgreSQL怎么创建分区表详解
Jun 25 PostgreSQL
PostgreSQL之连接失败的问题及解决
May 08 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带密码功能并下载远程文件保存本地指定目录 修改加强版
2010/05/16 PHP
javascript,php获取函数参数对象的代码
2011/02/03 PHP
PHP之APC缓存详细介绍 apc模块安装
2014/01/13 PHP
模板引擎smarty工作原理以及使用示例
2014/05/25 PHP
php.ini中的request_order推荐设置
2015/05/10 PHP
PHP+Mysql+jQuery中国地图区域数据统计实例讲解
2015/10/10 PHP
Yii中实现处理前后台登录的新方法
2015/12/28 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
php并发加锁问题分析与设计代码实例讲解
2021/02/26 PHP
jquery 1.3.2 IE8中的一点点的小问题解决方法
2009/07/10 Javascript
JavaScript中各种编码解码函数的区别和注意事项
2010/08/19 Javascript
EXT窗口Window及对话框MessageBox
2011/01/27 Javascript
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
js实现可折叠展开的手风琴菜单效果
2015/09/07 Javascript
浅谈jquery中next与siblings的区别
2016/10/27 Javascript
javascript 实现文本使用省略号替代(超出固定高度的情况)
2017/02/21 Javascript
node结合swig渲染摸板的方法
2018/04/11 Javascript
Angular4 反向代理Details实践
2018/05/30 Javascript
使用mixins实现elementUI表单全局验证的解决方法
2019/04/02 Javascript
详解用async/await来处理异步
2019/08/28 Javascript
JS实现旋转木马轮播图
2020/01/01 Javascript
vue-admin-template配置快捷导航的代码(标签导航栏)
2020/09/04 Javascript
解决antd Form 表单校验方法无响应的问题
2020/10/27 Javascript
Python机器学习之SVM支持向量机
2017/12/27 Python
python 实时得到cpu和内存的使用情况方法
2018/06/11 Python
Python使用cx_Freeze库生成msi格式安装文件的方法
2018/07/10 Python
Python中的CSV文件使用&quot;with&quot;语句的方式详解
2018/10/16 Python
python matplotlib饼状图参数及用法解析
2019/11/04 Python
Python StringIO如何在内存中读写str
2020/01/07 Python
浅谈tensorflow模型保存为pb的各种姿势
2020/05/25 Python
5款实用的python 工具推荐
2020/10/13 Python
css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况
2016/12/06 HTML / CSS
艺龙旅行网酒店预订:国内、港澳台酒店
2018/06/26 全球购物
影子教师研修方案
2014/06/14 职场文书
村长反四风问题个人对照检查材料
2014/09/21 职场文书
法学专业大学生实习自我鉴定
2014/10/05 职场文书