数据库学习之MySQL (十一)—— 统计函数 COUNT MIN MAX AVG SUM

MySQL学习专栏 正在持续更新中:)

总表 统计函数

名称 英文 中文 返回值
COUNT() count 计数 统计指定列不为NULL的记录行数
MAX() maxium 最大值 计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算
MIN() minium 最小值 计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算
SUM() summary 求和 计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0
AVG() average 平均值 计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0

NULL是否影响SUM AVG的计算?

不影响,SUM AVG内部实现了COUNT的功能。

MAX MIN 用在日期时间上会怎么样

会将时间离得更近的认为更大(因为数值大)

这些函数用在字符串上会怎么样

除了COUNT(),当然一般是不推荐的。
硬要说的话,
SUM AVG得凉,硬要放进去 就会返回没有意义的值如 0。
MIN MAX 会采用字符串排序 (STRCMP())

结合上节文章案例 统计一波

上期文章传送门:数据库学习之MySQL (十)—— 日期和时间函数 流程控制函数
在这里插入图片描述
上面表格的数据,统计后的结果如下:
在这里插入图片描述

USE data1;
SELECT 
  MAX(`hiredate`) 最近入职时间,
  MIN(`hiredate`) 最老入职时间,
  SUM(`salary`) 最终工资总数,
  AVG(`salary`) 最终工资总数平均,
  CASE
    WHEN YEAR(`hiredate`) < 1996 
    THEN `salary` * (1+0.6+IFNULL(`commission_pct`, 0)) 
    WHEN YEAR(`hiredate`) BETWEEN 1997 AND 2000 
    THEN `salary` * (1+0.4+IFNULL(`commission_pct`, 0)) 
    WHEN YEAR(`hiredate`) BETWEEN 2001 AND 2010 
    THEN `salary` * (1+0.2+IFNULL(`commission_pct`, 0))
    WHEN YEAR(`hiredate`) BETWEEN 2011 AND 2014 
    THEN `salary` * (1+0.1+IFNULL(`commission_pct`, 0))
    ELSE `salary` * (1+0.0+IFNULL(`commission_pct`, 0))
  END AS 最终工资 
FROM
  employees 
ORDER BY 最终工资 DESC ;


DISTINCT 关键字的应用

案例 我们想知道奖金率有多少种,而且具体每种的值是什么?
第一要去NULL 第二 去重 第三 最好来个降序排序查询
在这里插入图片描述在这里插入图片描述

SELECT
  DISTINCT IFNULL(`commission_pct`, 0) 奖金率种类
FROM employees
ORDER BY 奖金率种类 DESC;

SELECT
  COUNT(DISTINCT `commission_pct`) 奖金率种数
FROM employees;

COUNT 花式应用

最主要的就是用来统计类的实例数量(有多少行),当然要求你实例的属性(列对应得值)至少得有个不为NULL(全是NULL 实例不存在了)
于是我们可以这么写
SELECT COUNT(*) FROM employees;
这种写法无论是MySQL 5.5之前的存储引擎MYISAM 还是5.5之后的INNODB 都是最快、效率最高的统计行数办法。
当然你也可以这么写:
SELECT COUNT('杰伦') FROM employees;
或者
SELECT COUNT(1234) FROM employees;
结果相同,它实现原理是每一行都多一个属性,叫1234 或者 ‘杰伦’ (你自定义的),然后统计有多少个1234或者’杰伦’ 达到一样的行数统计效果。

下一站:

发布了12 篇原创文章 · 获赞 8 · 访问量 563

猜你喜欢

转载自blog.csdn.net/weixin_43178828/article/details/104079951
今日推荐