数据库教程:PostgreSQL聚合函数的分组排序使用示例

聚合函数用于汇总的函数。countcount,计算表中的行数(记录数)。计算全部数据的行数:select count(*) from product;null之外的数据行数:select count


聚合函数

用于汇总的函数。

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聚合函数分组排序的资料请关注<计算机技术网(www.ctvol.com)!!>其它相关文章!

需要了解更多数据库技术:PostgreSQL聚合函数的分组排序使用示例,都可以关注数据库技术分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/dtteaching/1086936.html

(0)
上一篇 2022年4月30日
下一篇 2022年4月30日

精彩推荐