第三章 聚合与排序
- 3-1 对表进行聚合查询
聚合函数:通过SQL对数据进行汇总时需要使用的函数。(多行输出一行)
COUNT 计算行数
SUM 计算表中数值列中数据的合计值 AVG 平均值
MAX 求表中任意列中数据的最大值 MIN 最小值
SELECT COUNT(*), COUNT(col_1)
FROM NullTbl; 【注:括号里为选择的列名,而当为*号时,会得到包含NULL的数据行数】
聚合函数会将NULL排除在外,而只有count(*)是例外的 。
MAX/MIN函数原则上可以适用于任何数据类型的列。
使用聚合函数删除重复值:将DISTINCT作为关键字
SELECT COUNT(DISTINCT product_type)
FROM Product; 【计算去除重复数据后的数据行数,DISTINCT必须写在括号中】
- 3-2 对表进行分组
GROUP BY子句: 应用于WHERE子句之后,先由WHERE子句过滤条件。
SELECT product_type, COUNT(*)
FROM Product
GROUP BY product_type; 【称为聚合键或分组列,可以用逗号分隔指定多列,按顺序分组】
聚合键中包含NULL时,在结果中会以空行的形式表现出来。
※※※※※※※※※※※※
1.在使用聚合函数时,SELECT子句中只能存在三种元素:
常数,聚合函数,GROUP BY 子句中指定的列名(聚合键)
2.在GROUP BY 子句中不可以写列的别名,且结果不能排序
3.WHERE子句中不能使用聚合函数
※※※※※※※※※※
- 3-3 为聚合结果指定条件
HAVING 子句:可以使用聚合函数,且不能包含聚合键之外的列名
SELECT product_type, AVG(sale_price)
FROM Product
GROUP BY product_type
HAVING AVG(sale_price) >= 2500;
WHERE子句=指定行所对应的条件 ;HAVING子句=指定组所对应的条件
- 3-4对查询结果进行排序
ORDER BY子句需写在整个SELECT语句的末尾,对即将返回的结果执行排序。
SELECT product_id, product_name, sale_price, purchase_price
FROM Product
ORDER BY sale_price DESC; 【sale_price称为排序键,后面DESC为降序,ASC为升序,默认为升序】
也可以同时指定多个排序键,从左到右的优先级。当排序键中存在NULL时,会在开头或末尾集中显示。ORDER BY中可以使用别名,也可以使用聚合函数。