加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PostgreSQL基础5--聚合与排序

发布时间:2020-12-13 16:49:29 所属栏目:百科 来源:网络整理
导读:1 聚合函数 1.1 COUNT() SELECT COUNT(*) FROM product;SELECT COUNT(purchase_price) FROM product; 注意:count(*) 会得到包含NULL的数据行数,count(列名)会得到NULL之外的数据行数 1.2 聚合函数SUM() SELECT SUM(sale_price) FROM product; 注意:在对包

1 聚合函数

1.1 COUNT()

SELECT COUNT(*) FROM product;
SELECT COUNT(purchase_price) FROM product;

注意:count(*) 会得到包含NULL的数据行数,count(<列名>)会得到NULL之外的数据行数

1.2 聚合函数SUM()

SELECT SUM(sale_price) FROM product;
注意:在对包含NULL的对应列数据进行计算时,会将NULL 排除在外进行计算,所以就不会和“四则运算中如果存在NULL,结果就一定是NULL”相矛盾;且这种排除和将其视为“0”并不相同。
1.3MAX() MIN()

SELECT MAX(sale_price),MIN(purchase_price) FROM product;

注意:这两个函数适合所有数据类型,包括字符串类型的列,而SUM()和AVG()只适合数值类型的列
1.4DISTINCT

SELECT COUNT(DISTINCT product_type) FROM product;

注意:此聚合可以计算出此列数据值的种类,且是删除掉相同的数据再计算

2 对表进行分组 GROUP BY

SELECT product_type,COUNT(*) FROM product GROUP BY product_type;
对查出的数据按product_type进行分类



SELECT purchase_price,COUNT(*) FROM product GROUP BY purchase_price;
注意:如果包含NULL值,也会将其归为一组



3 为聚合结果指定条件 HAVING

注意:HAVING子句是用来指定分组的条件,WHERE子句是用来指定数据行的条件

HAVING子句要写在GROUP BY子句之后

构成:常数 聚合函数 GROUP BY子句中指定的列名(即聚合键

SELECT product_type,COUNT(*) FROM product GROUP BY product_type HAVING COUNT(*) = 2;


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


SELECT product_type,AVG(sale_price) FROM product GROUP BY product_type;

SELECT product_type,AVG(sale_price) FROM product GROUP BY product_type HAVING AVG(sale_price) <= 2500;



4 对查询结果排序

4.1 ASC--升序 DESC--降序

SELECT product_id,product_name,sale_price,purchase_price FROM product ORDER BY sale_price;
以sale_price升序排列,不指定的话默认是升序
SELECT product_id,purchase_price FROM product ORDER BY sale_price DESC;
以sale_price降序排列



4.2 指定多个排序键

SELECT product_id,purchase_price FROM product ORDER BY sale_price,product_id;
使用多个排序键,优先级依次降低,先以sale_price升序排,如果sale_price相同再以product_id升序排

4.3 ORDER BY 值得注意的地方

4.3.1可以使用列的别名

SELECT product_id AS id,sale_price AS sp,purchase_price FROM product ORDER BY sp,id; 
注意:为什么GROUP BY字句里面不可以使用别名,而ORDER BY里面可以使用别名?

因为在DBMS内部的执行顺序中,SELECT字句在GROUP BY字句之后,ORDER BY字句之前
,所以GROUP BY字句在使用别名的时候,别名还没有被创建。DBMS内部执行顺序(可能不同的数据库略有差别):FROM --> WHERE --> GROUP BY --> HAVING --> SELECT --> ORDER BY

4.3.2 可以使用SELECT子句中未出现的列

SELECT product_name,purchase_price  FROM product ORDER BY product_id;

4.3.3可以使用聚合函数
SELECT product_type,COUNT(*) FROM product GROUP BY product_type ORDER BY COUNT(*);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读