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
Centos环境下Postgresql 安装配置及环境变量配置技巧
May 18 PostgreSQL
通过Qt连接OpenGauss数据库的详细教程
Jun 23 PostgreSQL
postgresql 删除重复数据案例详解
Aug 02 PostgreSQL
PostgreSQL自动更新时间戳实例代码
Nov 27 PostgreSQL
PostGIS的安装与入门使用指南
Jan 18 PostgreSQL
PostgreSQL数据库创建并使用视图以及子查询
Apr 11 PostgreSQL
PostgreSQL数据库去除重复数据和运算符的基本查询操作
Apr 12 PostgreSQL
PostgreSQL出现死锁该如何解决
May 30 PostgreSQL
postgresql之greenplum字符串去重拼接方式
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
SONY ICF-SW07收音机电路分析
2021/03/02 无线电
桌面中心(二)数据库写入
2006/10/09 PHP
PHP脚本数据库功能详解(中)
2006/10/09 PHP
php学习之 认清变量的作用范围
2010/01/26 PHP
Java和PHP在Web开发方面对比分析
2015/03/01 PHP
php实现文本数据导入SQL SERVER
2015/05/17 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
Mootools 1.2 手风琴(Accordion)教程
2009/09/15 Javascript
jQuery html()等方法介绍
2009/11/18 Javascript
基于jquery封装的一个js分页
2011/11/15 Javascript
带左右箭头图片轮播的JS代码
2013/12/18 Javascript
jquery 取子节点及当前节点属性值
2014/07/25 Javascript
12行javascript代码绘制一个八卦图
2015/04/02 Javascript
EasyUI Combobox设置默认值 获取text的方法
2016/11/28 Javascript
jQuery选择器实例应用
2017/01/05 Javascript
详解使用angular的HttpClient搭配rxjs
2017/09/01 Javascript
如何基于filter实现网站整体变灰功能
2020/04/17 Javascript
vue 如何使用递归组件
2020/10/23 Javascript
Python中字符串对齐方法介绍
2015/05/21 Python
Python迭代和迭代器详解
2016/11/10 Python
tensorflow实现softma识别MNIST
2018/03/12 Python
Python生成器的使用方法和示例代码
2019/03/04 Python
python字符串的拼接方法总结
2019/11/18 Python
python3中rank函数的用法
2019/11/27 Python
基于python实现地址和经纬度转换
2020/05/19 Python
如何基于pandas读取csv后合并两个股票
2020/09/25 Python
python 基于UDP协议套接字通信的实现
2021/01/22 Python
Stubhub英国:购买体育、演唱会和剧院门票
2018/06/10 全球购物
美国领先的眼镜和太阳镜在线零售商:Glasses.com
2019/08/26 全球购物
PatPat香港:婴童服饰和亲子全家装在线购物
2020/09/27 全球购物
竞选生活委员演讲稿
2014/04/28 职场文书
工资收入证明样本(5篇)
2014/09/16 职场文书
中学生自我评价2015
2015/03/03 职场文书
简单的辞职信范文(2016最新版)
2015/05/12 职场文书
MySQL中distinct和count(*)的使用方法比较
2021/05/26 MySQL
Django对接elasticsearch实现全文检索的示例代码
2021/08/02 Python