Mysql学习笔记(006)-常见函数-分组函数

分组函数

 

 1 #二、分组函数
 2 /*
 3 功能:用作统计使用,又称为聚合函数或统计函数或组函数
 4 
 5 分类:
 6 sum 求和、avg 平均值 max最大值 min最小值 count计算个数
 7 
 8 特点:
 9 1、sum、avg一般用于处理数值型
10    max、min、count可以处理任何类型
11 2、以上分组函数都忽略null值
12 
13 3、可以和distinct搭配实现去重的运算
14 
15 4、count函数的单独介绍
16 一般使用count(*)用作统计行数
17 
18 5、和分组函数一同查询的字段要求是group by后的字段
19 
20 */
21 #1、简单的使用
22 SELECT SUM(salary) FROM employees;
23 SELECT AVG(salary) FROM employees;
24 SELECT MAX(salary) FROM employees;
25 SELECT MIN(salary) FROM employees;
26 SELECT COUNT(salary) FROM employees;
27 
28 SELECT SUM(salary) 和,AVG(salary) 平均,MAX(salary) 最大,MIN(salary) 最小,COUNT(*) 个数
29 FROM employees;
30 
31 SELECT SUM(salary) 和,ROUND(AVG(salary),2) 平均,MAX(salary) 最大,MIN(salary) 最小,COUNT(*) 个数
32 FROM employees;
33 
34 #2、参数支持哪些类型
35 SELECT SUM(last_name),AVG(last_name) FROM employees;#不报错,但是没有逻辑意义,不像java强制
36 SELECT SUM(hire_date) FROM employees;
37 
38 SELECT MAX(last_name),MIN(last_name) FROM employees;
39 
40 SELECT MAX(hire_date),MIN(hire_date) FROM employees;
41 SELECT COUNT(commission_pet) FROM employees
42 SELECT COUNT(last_name) FROM employees;
43 
44 #3、忽略null
45 SELECT SUM(commission_pet), AVG(commission_pet),SUM(commission_pet)/35,SUM(commission_pet)/107 FROM employees;
46 SELECT MAX(commission_pet), MIN(commission_pet) FROM employees;
47 SELECT COUNT(commission_pet) FROM employees;
48 SELECT commission_pet FROM employees;
49 
50 #4、和distinct搭配
51 SELECT SUM(DISTINCT salary),SUM(salary) FROM employees;
52 SELECT COUNT(DISTINCT salary),COUNT(salary) FROM employees;
53 
54 #5、count函数的详细介绍
55 SELECT COUNT(salary) FROM employees;
56 SELECT COUNT(*) FROM employees;
57 SELECT COUNT(1) FROM employees;#相当于加了一列1,计算该列1个数
58 
59 效率:
60 MYISAM 存储引擎下,count(*)的效率最高,内部有计数器
61 INNODB 存储引擎下,count(*)和count(1)的效率差不多,比count(字段)要高一些#字段会先做筛选判断
62 
63 #6、和分组函数一同查询的字段有限制
64 SELECT AVG(salary),employee_id FROM employees; #5.5可以通过,5.71140报错
65  

 

小结

练习:

#1.查询公司员工工资的最大值,最小值,平均值以及总和
SELECT MAX(salary) mx_sal,MIN(salary) mi_sal,ROUND(AVG(salary),2) ag_sal,SUM(salary) sm_sal
FROM employees;

#2.查询员工表中的最大入职时间和最小入职时间的相差天数 
 
 
SELECT DATEDIFF('2019-1-3','2019-1-8');
SELECT DATEDIFF(NOW(),'1998-1-1'); 
SELECT DATEDIFF(MAX(hiredate),MIN(hiredate))
FROM employees;

#3.查询员工部门编号为90的员工个数
SELECT COUNT(*)
FROM employees
WHERE  department_id=90;

  

posted @ 2020-01-06 16:30  klandehu  阅读(180)  评论(0)    收藏  举报