mysql函数 分组_mysql——常见函数之分组函数

二、分组函数

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

分类:

①SUM:求和

②AVG:求平均值

③MAX:求最大值

④MIN:求最小值

⑤COUNT:计算个数

特点:

①SUM和AVG仅支持数值型参数

②MAX、MIN支持可比较的参数

③COUNT支持任何类型的参数,但只计数非空的值

④所有分组函数都忽略NULL值,对于为NULL的字段不参与运算

⑤与DISTINCT搭配使用实现去重

⑥COUNT最常用

⑦和分组函数一同查询的字段要求是GROUP BY后的字段

效率:

5.5以前的存储引擎MYISAM:COUNT(*)的效率最高

5.5以后的存储引擎INNODB:COUNT(1)与COUNT(*)效率大致相同 > COUNT(字段)#1、简单使用

USE myemployees;

SELECT SUM(salary) FROM employees;

SELECT AVG(salary) FROM employees;

SELECT MAX(salary) FROM employees;

SELECT MIN(salary) FROM employees;

SELECT COUNT(salary) FROM employees;    #计算salary字段非空的值有多少个

SELECT SUM(salary) 和,ROUND(AVG(salary),2) 平均,MAX(salary) 最大

FROM employees;

#2、参数支持哪些类型

#sum和avg仅支持数值型参数,max、min支持可比较的参数,count支持任何类型的参数,但只计数非空的值

SELECT SUM(last_name),AVG(last_name)

FROM employees;

SELECT MAX(last_name),MIN(last_name),COUNT(last_name)

FROM employees;

134778371253cc9549b2901ab151231b.png      3185cee1677608ab412e37ae8cca6660.png

#3、是否忽略null值

SELECT SUM(commission_pct),AVG(commission_pct),SUM(commission_pct)/35,SUM(commission_pct)/107

FROM employees;

SELECT MAX(commission_pct),MIN(commission_pct),COUNT(commission_pct)

FROM employees;

0da008af9efb08791486185540c055c8.png

22852230400da90a56ddb56adaed3ffb.png

#4、与distinct搭配

SELECT SUM(salary),SUM(DISTINCT salary)

FROM employees;

SELECT COUNT(DISTINCT commission_pct)    #去重前107,后7

FROM employees;

SELECT COUNT(DISTINCT salary)     #去重前107,后57

FROM employees;

SELECT AVG(salary),AVG(DISTINCT salary) #去重前6461.682243,去重后6461.682243

FROM employees;

SELECT MIN(salary),MIN(DISTINCT salary) #去重前2100.00,去重后2100.00

FROM employees;

f9f410fa496333b697d24d951f56217c.png   097e9fcbda775b604e9c9c5d09e094c0.png   fd4787cdbeb578814f7c81349b1a313e.png

8a97a0f8b670da5da3802b6c57fdfe03.png  bcd5a5a37a7cc85c734de554062af194.png

#5、count函数的详细介绍

SELECT COUNT(salary) FROM employees;

SELECT COUNT(*) FROM employees;

#统计任何非空列(只要有字段不为空)==查询表的总行数

SELECT COUNT(1) FROM employees;

#相当于给每一行的最后插入一个字段,字段的值均为1,count统计1的个数==查询表的总行数

SELECT COUNT(i) FROM employees;

#相当于给每一行的最后插入一个字段,字段的值均为i这个常量,count统计1的个数==查询表的总行数

3e3d1dd112900fa082a4910dbfb079ae.png    cc7dd9bf54ea30ceb8edf6d6da31e624.png

#6、和分组函数一同查询的字段有限制

SELECT AVG(salary),job_id

FROM employees;

d14b55b5822beb5789f09047189f80dd.png

#练习

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

SELECT job_id,MAX(salary),MIN(salary),ROUND(AVG(salary),2),SUM(salary)

FROM employees;

2. 查询员工最高工资和最低工资的差距(DIFFERENCE)

SELECT MAX(salary)-MIN(salary) devalue

FROM employees;

3.查询最大入职时间和最小入职时间的相差天数(difference)

#datediff(expr1,expr2)  计算日期expr1与expr2之间相差的天数

SELECT DATEDIFF('2020-03-07','1972-12-10');

SELECT DATEDIFF(MAX(hiredate),MIN(hiredate)) difference

FROM employees;

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

SELECT department_id,COUNT(*) AS 数量

FROM employees

WHERE department_id=90;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值