分组 查出id最大的_[MySQL基础]五、分组函数

功能:用作统计使用,又称为聚合函数或者统计函数或组函数

分类:sum 求和、avg 平均值、max 最大值、min 最小值、count 计算个数

5.1 简单的使用

SELECT SUM(salary) FROM employees;
SELECT AVG(salary) FROM employees;
SELECT MIN(salary) FROM employees;
SELECT MAX(salary) FROM employees;
SELECT COUNT(salary) FROM employees; #返回非空值的个数

也可以写在一行:

SELECT 
  SUM(salary) AS "和" ,AVG(salary) AS "平均",
  MAX(salary) AS "最高",
  MIN(salary) AS "最低",
  COUNT(salary) AS "个数" 
FROM
  employees ;

5.2 参数支持哪些类型

  • sum、avg一般用于处理数值型
  • min、max、count可以处理任何类型

5.3是否忽略null

  • 以上的分组函数均忽略null

测试是否忽略null的思路:

SELECT 
  SUM(commission_pct),
  AVG(commission_pct),
  SUM(commission_pct) / 35, #35个非空值
  SUM(commission_pct) / 107 #一共有107个值
FROM
  employees ;

结果:

ce5f8c0ac4f373246581fb817059d4c4.png

5.4 可以和distinct搭配实现去重

SELECT 
  SUM(DISTINCT salary),
  SUM(salary) 
FROM
  employees ;

结果:

3a4d327c7a7e99edcb4b1b90f31bcf7e.png

5.5 count函数的详细介绍

一般使用count(*)用作统计行数

SELECT COUNT(salary) FROM employees;
SELECT COUNT(*) FROM employees; #统计行数,只要这一行有非空就统计进入

下面的两条的功能是一样的:

SELECT COUNT(1) FROM employees;
SELECT COUNT(2) FROM employees; #统计2有多少个,从而间接统计表格有多少行

效率:

MYISAM存储引擎下,count(*)的效率高

INNODB存储引擎下,count(*)和count(1)的效率差不多,比count(字段)更高一些

5.6 和分组函数一同查询的字段有限制

SELECT AVG(salary),employee_id FROM employees;

结果:

640ff199b60251c5544922af581554d5.png

这里的100没有意义,这里不是表示第100号员工的工资。

小测试

1.查询公司员工工资的最大值,最小值,平均值,总和

SELECT 
  MAX(salary) AS "mx_sal" , MIN(salary) AS "mi_sal",
  AVG(salary) AS "sm_sal" 
FROM
  employees ;

2.查询员工表中的最大入职时间和最小入职时间的相差天数

补充知识:

datediff(a,b) :a,b两个日期相差多少天,a-b。

案例:现在距离国庆放假还有多少天

SELECT DATEDIFF('2020-10-1','2020-4-8'); #返回176

解答:

SELECT 
  DATEDIFF(MAX(hiredate), MIN(hiredate)) AS "DIFFRENCE" 
FROM
  employees ;

3.查询部门编号为90的员工个数

SELECT 
  COUNT(*) 
FROM
  employees 
WHERE department_id = 90 ;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值