聚合与排序
学习重点
随着表中记录(数据行)的不断积累,存储数据逐渐增加,有时候我们可能希望计算出这些数据的合计值或者平均值等。本章我们将进行数据汇总操作.此外还能学习在汇总操作时指定条件,以及对汇总结果进行升序,降序的排序方法
对表进行聚合查询
学习重点
使用聚合函数对表中的列进行计算合计值或者平均值等的汇总操作
通常聚合函数会对 NULL 以外的对象进行汇总,但是只有 COUNT 函数例外,使用 COUNT(*)可以查出包含 NULL 在内的全部数据的行数
使用 DISTINCT 关键字删除重复值
聚合函数
通过 SQL 对数据进行某种操作或计算时需要使用函数,比如计算表中全部数据的行数,可以使用 COUNT 函数.先记住 5 个常用的函数
COUNT: 计算表中的记录数(行数)
SUM:计算表中数值列中数据的合计值
AVG:计算表中数值列中数据的平均值
MAX:求出表中任意列中数据的最大值
MIN:求出表中任意列中数据的最小值
用于汇总的函数称为聚合函数或者聚集函数,所谓聚合就是将多行汇总为一行
计算表中数据的行数
COUNT(*) 统计全部数据 而 COUNT(列名)只统计非空数据
- 基础代码
SELECT COUNT(*) FROM 表名;
COUNT() 中的星号 代表全部列,也可以换成别的,比如列名
- 拿上个单元举例子
SELECT COUNT(*) AS '总数' FROM Product;
最后结果
总数 |
---|
8 |
计算 NULL 之外的数据的行数
上个单元比如统计 purchase_price 中非空行
SELECT COUNT(purchase_price) AS '总数' FROM Product;
最后结果:因为有两行的数据是空行
总数 |
---|
6 |
计算合计值
除了 COUNT 以外 其他的聚合函数都只能写列名,并且统计非 NULL 数据
SUM 函数
数字求和 ,要是里面有字符串则都是 0
- 基础版本
SELECT SUM(列名) AS 'xxx' FROM 表名;
- 上个单元求和
SELECT SUM(purchase_price) AS '总数' FROM Product;
- 最后结果
总数 |
---|
12210 |
- 多列求和
SELECT SUM(purchase_price) AS '价格总数',SUM(sale_price) AS '总数' FROM Product;
- 最后结果
价格总数 | 总数 |
---|---|
12210 | 16780 |
计算平均值 AVG
它的语法与 SUM 完全相同,但是返回的数字是浮点型 有小数点,小数点有 4 位
- 基础语法
SELECT AVG(列名) AS 'xxxx' FROM 表名;
- 上个单元
SELECT AVG(purchase_price) AS '价格平均数' FROM Product;
- 最后结果
价格平均数 |
---|
2035.0000 |
- 多列
SELECT AVG(purchase_price) AS '价格总数',AVG(sale_price) AS '总数' FROM Product;
- 最后结果
价格总数 | 总数 |
---|---|
2035.0000 | 2097.5000 |
计算最大值和最小值
要是想计算最大值和最小值可以用 Max 和 Min 函数, 这两个函数适用于任何数据类型
- 基本用法
SELECT MAX(列名) AS 'xxxx' FROM 表名;
SELECT MIN(列名) AS 'xxxx' FROM 表名;
- 上个单元
SELECT MAX(purchase_price) AS '最大值',MIN(sale_price) AS '最小值' FROM Product;
- 最后结果
最大值 | 最小值 |
---|---|
5000 | 100 |
- 字符串
SELECT MAX(product_name) AS '最大值',MIN(product_id) AS '最小值' FROM Product;
- 最后结果
最大值 | 最小值 |
---|---|
高压锅 | 0001 |
使用聚合函数删除重复值(关键字 DISTINCT)
- 删除基本数据
SELECT COUNT(DISTINCT product_type) FROM Product
- 最后结果
COUNT(DISTINCT product_type) |
---|
3 |
这里特别注意 DISTINCT 必须写在括号中,因为必须要在计算行数之前删除 product_type 列中的重复数据.如果写在外面的话 会计算出数据的行数,再删除重复数据,结果就是 producr_type 列的所有行数
SELECT DISTINCT COUNT(product_type) FROM Product
结果
COUNT |
---|
8 |
- 类似其他的聚合函数
SELECT SUM(DISTINCT purchase_price) AS '总数',SUM(DISTINCT sale_price ) AS '合值'FROM Product;
- 最后结果
总数 | 合值 |
---|---|
9410 | 16280 |
在聚合函数的参数中使用 DISTINCT,就可以删除重复数据