mysql 中常用的聚合函数的使用

mysql 中常用的聚合函数的使用

文章目录

      • 1 count 函数
      • 2 sum 函数
      • 3 avg 函数 计算平均值
      • 4 max 和min 函数 求最大值 ,最小值
      • 总结
      • 参考文档:

什么是聚合函数:

聚合函数 一般 是指 汇总的函数.

例如 MAX ,MIN ,SUM ,COUNT AVG 这些聚合函数, 通过看缩写 大概也知道 这些意思, 最大,最小,求和,求总数量,求平均值.

这些函数 我们平常都在用,有一些 用法,也是最近的 读书笔记在这里记录一下, 一些函数的使用细节.

好吧 直奔主题 假设 有这样的一张表.

CREATE TABLE `Product` (
  `product_id` char(4) NOT NULL,
  `product_name` varchar(100) NOT NULL,
  `product_type` varchar(32) NOT NULL,
  `sale_price` int(11) DEFAULT NULL,
  `purchase_price` int(11) DEFAULT NULL,
  `regist_date` date DEFAULT NULL,
  PRIMARY KEY (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

数据如下:

product_id product_name product_type sale_price purchase_price regist_date
1 T恤 衣服 1000 500 2009/9/20
2 打孔器 办公用品 500 320 2009/9/11
3 运动T恤 衣服 4000 2800
4 菜刀 厨房用具 3000 2800 2009/9/20
5 高压锅 厨房用具 6800 5000 2009/1/15
6 叉子 厨房用具 500 2009/9/20
7 擦菜板 厨房用具 880 790 2008/4/28
8 圆珠笔 办公用品 100 2009/11/11

1 count 函数

count 函数 可以 计算数据的行数 .

下面这个sql 结果很明显是 8 ,因为数据有 8 行

select count(*) from Product  ;  -- 8

看下面的结果:

select count(purchase_price) from Product  ;  -- 6

发现结果是6

count() 函数里面 可以传递 列名作为 参数, 如果传入特定的列名, 则不会把这列的NULL 统计在内的.即刚刚看到的有两个 是缺失 的就没有进行统计. 所以 就是 6 , 而count(*) 会得到包含NULL的数据行.

2 sum 函数

很明显sum 是计算 合计值的.

sale_price purchase_price
1000 500
500 320
4000 2800
3000 2800
6800 5000
500
880 790
100
16780 12210

这个直接累加

SELECT SUM(sale_price) FROM Product ;  -- 16780

对于 purchase_price 中含有NULL, 也可以正确计算出结果.

SELECT SUM(purchase_price) FROM Product ;  -- 12210

sum 这个函数 是如何计算 列中含有 NULL 值的呢? 猜测 第一种 直接把 NULL 转成0 ,进行相加.

第二种 : 直接忽略NULL , 直接计算有值的列.

真实情况下: sum 会忽略 NULL 的数据, 把剩下的数据行进行累加. 因为 我们知道 任何数据和 NULL 进行四则运算 最终结果 都是 NULL.

 SELECT  5 + NULL,  5 - NULL ,5 * NULL,5 / NULL,NULL / 5, NULL /0;
 

结果如下:

img

实际上 sum 是采用 第二种方案, 直接忽略 NULL 的数据行, 把其他数据进行累加.

3 avg 函数 计算平均值

SELECT AVG(sale_price),AVG(purchase_price) FROM Product ;  -- 16780

mysql 中常用的聚合函数的使用_第1张图片

来分析 一下: sale_price 的平均值 = 16780 / 8 = 2097.5

purchase_price 的平均值 = 12210 / 8 = 1526.25

发现和 sql 的结果并不一样, 其实 是 12210 / 6 = 2035.0

我想 应该看明白了, 因为 purchase_price 中有两个空值 , AVG 函数 也是先把他们排除在外了, 然后 除6 得到的结果. 而不是除8 的结果.

如果要实现 除8 的话,可以使用 函数 coalesce 进行 把 NULL 转成0 ,这样 AVG 就不会 删除他们在计算平均值了.

SELECT AVG(COALESCE(purchase_price,0)),AVG(purchase_price)  FROM Product ;

结果如下:

img3

4 max 和min 函数 求最大值 ,最小值

max/min 函数 可以适用于任何数据类型. 可以是数值类型,也可以是日期类型 .

而刚刚讲到 sum , avg 只能针对 数值类型的列进行求值.

对于数值类型

SELECT MAX(sale_price),MAX(purchase_price) FROM Product ;

mysql 中常用的聚合函数的使用_第2张图片

SELECT MAX(regist_date), MIN(regist_date) FROM Product ;

mysql 中常用的聚合函数的使用_第3张图片

总结

本来简单总结了mysql 中常用的函数 以及注意事项. count(*) ,和 count(列名) 的区别.

sum() 遇到NULL 的处理等. 这篇文章也是一个读书笔记,记录最近看了一些sql 相关的内容,希望可以帮到你.

参考文档:

sql 基础教程 --孙淼 罗勇 翻译

分享快乐,留住感动. '2019-08-25 21:05:58' --frank

你可能感兴趣的:(数据库相关)