SQL基础(三) 聚合与排序

笔记整理自《SQL基础教程(日)》第3章 http://www.ituring.com.cn/book/1086

3-1) 对表进行聚合查询

1. 聚合函数

用于“汇总”的函数统称为“聚合函数”或“聚集函数”。

5个常用函数:Count (计算表中记录的行数)  Sum (计算列的合计值)  AVG (计算列的平均值)  MAX (计算列的最大值)  MIN (计算列的最小值)

-- 计算该表包含的总行数
select count (*)
from Product;

-- 计算NULL之外的数据行数
select count (purchase_price)
from Product;

--将含有NULL的列作为参数时,count(*) 和 count(<列名>)的结果不同
--前者包含NULL数据行,后者不包括
select count(*), count(col_1)
from NullTb1;
select sum(sale_price)
from Product;

-- 聚合函数会将NULL排出在外。但 count(*)例外
select sum(sale_price), sum(purchase_price)
from Product;
select AVG (sale_price)
from Product;

-- MAX/MIN函数,可以适用于任何类型的列
select MAX(sale_price), MIN(purchase_price)
from Product;

select MAX(regist_date), MIN(regist_date)
from Product;

2. 使用聚合函数删除重复值

-- 关键字 distinct
select count(distinct product_type)
from Product;

-- 对比以下代码
select distinct count (product_type)
from Product;
-- SUM函数中,distinct 对产生结果的差异
select sum(sale_price), sum(distinct sale_price)
from Product;

 

3-2) 对表进行分组

1. Group by 子句

-- Group by 子句语法
select <列名1>, <列名2>, <列名3>,...
from <表名>
group by <列名1> <列名2> <列名3>,...
-- 按照商品种类对表进行切分
select product_type, count(*)
from Product
group by product_type;

GROUP BY子句中,指定的列称为聚合键或分组列

GROUP BY就像切分表的一把刀

到目前,子句的书写顺序为  select --> from --> where --> group by

2. 聚合键中包含NULL的情况

--聚合键中包含NULL时,在结果中以 “不确定行” (空行)的形式表现出来
select purchase_price, count(*)
from Product
group by purchase_price;

3. 使用where子句和group by子句进行汇总

--语法
select <列名1>, <列名2>, <列名3>,...
from <表名>
where 
group by <列名1> <列名2> <列名3>,...;
-- group by 和 where 并用时 select语句执行顺序
-- from --> where --> group by --> select
-- SQL语句中,书写顺序和DBMS内部执行顺序并不相同
select purchase_price, count(*)
from Product
where Product_type = '衣服‘
group by purchase_price;

4. 常见错误

-- 1)在select子句中书写聚合键之外的列名
select product_name, purchase_price, count(*)
from Product
group by purchase_price;

-- 2)在Group by子句中写了别的别名
select product_type as pt, count(*)
from Product
group by pt;

-- 3)Group by子句的结果,按随机排序

-- 4)在where子句中使用聚合函数
select product_type, count(*)
from Product
group by product_type;

select product_type, count(*)
from Product
where count(*) = 2
group by product_type;

5. distinct 和 group by

 

3-3) 为聚合结果指定条件

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值