mysql聚合函数有哪些及怎么使用
这篇“mysql聚合函数有哪些及怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“mysql聚合函数有哪些及怎么使用”文章吧。
AVG和SUM可以对数值型数据使用AVG 和 SUM 函数
代码案例
SELECTAVG(salary),SUM(salary),AVG(salary)*107FROMemployees;#错误案例:#如下的操作没有意义,因为不是数值类型SELECTSUM(last_name),AVG(last_name),SUM(hire_date)FROMemployees;MIN和MAX函数
可以对任意数据类型的数据使用 MIN 和 MAX 函数
代码案例
SELECTMAX(salary),MIN(salary)FROMemployees;SELECTMAX(last_name),MIN(last_name),MAX(hire_date),MIN(hire_date)FROMemployees;COUNT函数
COUNT(*)返回表中记录总数,适用于任意数据类型
代码案例
#计算指定字段在查询结构中出现的个数(不包含NULL值的)SELECTCOUNT(employee_id),COUNT(salary),COUNT(2*salary),COUNT(1),COUNT(2),COUNT(*)FROMemployees;#计算表中有多少条记录#方式1:COUNT(*)#方式2:COUNT(1)#方式3:COUNT(具体字段),不一定对#注意:计算指定字段出现的个数时,是不计算NULL值的SELECTCOUNT(commission_pct)FROMemployees;#公式:AVG=SUM/COUNTSELECTAVG(salary),SUM(salary)/COUNT(salary),AVG(commission_pct),SUM(commission_pct)/COUNT(commission_pct),SUM(commission_pct)/107FROMemployees;#查询公司中平均奖金率#错误写法:如果某些人的奖金为null,则不会计算SELECTAVG(commission_pct)FROMemployees;#正确写法SELECTSUM(commission_pct)/COUNT(IFNULL(commission_pct,0)),AVG(IFNULL(commission_pct,0))FROMemployees;#如何需要统计表中的记录数,使用COUNT(*)、COUNT(1)、COUNT(具体字段)哪个效率更高#如果使用的是MyISAM存储引擎,则三者效率相同,都是O(1)#如果使用的是InnoDB存储引擎,则三者效率:COUNT(*)=COUNT(1)>COUNT(字段)GROUP BY
可以使用GROUP BY子句将表中的数据分成若干组
代码案例
#查询各个部门的平均工资,最高工资SELECTdepartment_id,AVG(salary),SUM(salary)FROMemployeesGROUPBYdepartment_id#查询各个job_id的平均工资SELECTjob_id,AVG(salary)FROMemployeesGROUPBYjob_id;#查询各个department_id,job_id的平均工资#方式1:SELECTdepartment_id,job_id,AVG(salary)FROMemployeesGROUPBYdepartment_id,job_id;#方式2:SELECTjob_id,department_id,AVG(salary)FROMemployeesGROUPBYjob_id,department_id;#错误写法:job_id是非组函数,但没有写在groupby中SELECTdepartment_id,job_id,AVG(salary)FROMemployeesGROUPBYdepartment_id;#错误原因:SELECT中出现的非组函数的字段必须声明在GROUPBY中#反之,GROUPBY中声明的字段可以不出现在SELECT中#GROUPBY声明在FROM后面、WHERE后面,ORDERBY前面、LIMIT前面#MySQL中GROUPBY中使用WITHROLLUP,用于统计SELECTdepartment_id,AVG(salary)FROMemployeesGROUPBYdepartment_idWITHROLLUP;#查询各个部门的平均工资,按照平均工资升序排列SELECTdepartment_id,AVG(salary)avg_salFROMemployeesGROUPBYdepartment_idORDERBYavg_salASC;#当使用ROLLUP时,不能同时使用ORDERBY子句进行结果排序,即ROLLUP和ORDERBY是互相排斥的#错误写法SELECTdepartment_id,AVG(salary)avg_salFROMemployeesGROUPBYdepartment_idWITHROLLUPORDERBYavg_salASC;HAVING
简介
1.行已经被分组2.使用了聚合函数3.满足HAVING子句中条件的分组将被显示4.HAVING不能单独使用,必须要跟GROUPBY一起使用
代码案例
#查询各个部门中最高工资比10000高的部门信息#错误写法:不能在WHERE子句中使用聚合函数SELECTdepartment_id,MAX(salary)FROMemployeesWHEREMAX(salary)>10000GROUPBYdepartment_id;#如果过滤条件中使用了聚合函数,则必须使用HAVING来替换WHERE。否则会报错#HAVING必须声明在GROUPBY的后面#正确的写法:SELECTdepartment_id,MAX(salary)FROMemployeesGROUPBYdepartment_idHAVINGMAX(salary)>10000;#开发中,我们使用HAVING的前提是SQL中使用了GROUPBY,也即是说使用了having就必须使用groupby#查询部门id为10,20,30,40这4个部门中最高工资比10000高的部门信息#方式1:推荐,执行效率高于方式2SELECTdepartment_id,MAX(salary)FROMemployeesWHEREdepartment_idIN(10,20,30,40)GROUPBYdepartment_idHAVINGMAX(salary)>10000;#方式2:SELECTdepartment_id,MAX(salary)FROMemployeesGROUPBYdepartment_idHAVINGMAX(salary)>10000ANDdepartment_idIN(10,20,30,40);#当过滤条件中有聚合函数时,则此过滤条件必须声明在HAVING中#当过滤条件中没有聚合函数时,则此过滤条件声明在WHERE中或HAVING中都可以。但建议声明在WHERE中/**WHERE与HAVING的对比*1.从适用范围上来讲,HAVING的适用范围更广。*2.如果过滤条件中没有聚合函数:这种情况下,WHERE的执行效率要高于HAVING*/
sql语句书写顺序
SELECT...FROM...WHERE...GROUPBY...HAVING...ORDERBY...LIMIT...
sql语句执行顺序
FROM->WHERE->GROUPBY->HAVING->SELECT的字段->DISTINCT->ORDERBY->LIMIT
课后练习
#1.where子句不能使用组函数进行过滤#2.查询公司员工工资的最大值,最小值,平均值,总和SELECTMAX(salary)max_sal,MIN(salary)mim_sal,AVG(salary)avg_sal,SUM(salary)sum_salFROMemployees;#3.查询各job_id的员工工资的最大值,最小值,平均值,总和SELECTjob_id,MAX(salary),MIN(salary),AVG(salary),SUM(salary)FROMemployeesGROUPBYjob_id;#4.选择具有各个job_id的员工人数SELECTjob_id,COUNT(*)FROMemployeesGROUPBYjob_id;#5.查询员工最高工资和最低工资的差距(DIFFERENCE)SELECTMAX(salary)-MIN(salary)"DIFFERENCE"FROMemployees;#6.查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内SELECTmanager_id,MIN(salary)FROMemployeesWHEREmanager_idISNOTNULLGROUPBYmanager_idHAVINGMIN(salary)>=6000;#7.查询所有部门的名字,location_id,员工数量和平均工资,并按平均工资降序SELECTd.department_name,d.location_id,COUNT(employee_id),AVG(salary)FROMdepartmentsdLEFTJOINemployeeseONd.`department_id`=e.`department_id`GROUPBYdepartment_name,location_id#8.查询每个工种、每个部门的部门名、工种名和最低工资SELECTd.department_name,e.job_id,MIN(salary)FROMdepartmentsdLEFTJOINemployeeseONd.`department_id`=e.`department_id`GROUPBYdepartment_name,job_id
以上就是关于“mysql聚合函数有哪些及怎么使用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。