笔记整理自《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) 为聚合结果指定条件