当前位置:网站首页>第八章 聚合函数
第八章 聚合函数
2022-07-28 05:21:00 【大数据小理】
第八章 聚合函数
聚合函数类型:AVG(),SUM(),MAX(),MIN(),COUNT()
AVG(),SUM()只适合数值类型的变量和字段,字符串不能求和求平均值
SELECT AVG(salary),MAX(salary),MIN(salary),SUM(salary)
FROM employees
MIN(),MAX()适用于数值类型,字符串类型,日期时间类型的字符串或变量
SELECT MAX(last_name),MIN(last_name),MAX(hire_date),MIN(hire_date)
FROM employees
COUNT:作用是计算指定字段在查询结构中出现的个数,是不计算NULL值的
SELECT COUNT(employee_id),COUNT(salary),COUNT(1),COUNT(2),COUNT(*)
FROM employees
#如何计算表中有多少条记录
#方式一:count(*)方式二:count(1)
#查看有奖金的员工姓名以及奖金率
SELECT last_name, commission_pct
FROM employees
WHERE commission_pct IS NOT NULL
AVG=SUM/COUNT
SELECT AVG(salary),SUM(salary)/COUNT(salary),
AVG(commission_pct),SUM(commission_pct)/COUNT(commission_pct),
SUM(commission_pct)/107
FROM employees
#因为count中不会count空值,所以要用ifnull
SELECT SUM(commission_pct)/COUNT(IFNULL(commission_pct,0)),
AVG(IFNULL(commission_pct,0))
FROM employees;
如何统计记录数,可以COUNT(),COUNT(*),COUNT(用不存在非空的字段)
哪个效率更高呢
用MYISAM引擎的话三者效率相等
用INNODB的引擎COUNT(*)=COUNT(1)好于COUNT(字段)
#2 group by的使用:按字段进行分组
#查询各个部门的平均工和最高工资
SELECT department_id,AVG(salary),SUM(salary)
FROM employees
GROUP BY department_id
ORDER BY department_id ASC;
#需求:查询各个job_id的平均工资
SELECT job_id,AVG(salary),SUM(salary)
FROM employees
GROUP BY job_id;
#需求:求不同部门,相同job的平均工资
#先求不同部门,再找不同的job
SELECT department_id,job_id,AVG(salary)
FROM employees
GROUP BY department_id,job_id;
#或者:先求不同job_id,再求不同的部门 因为上面两个分法都是工种相同的并且部门号一样的才会在一起,只不过是先分后分的区别
SELECT department_id,job_id,AVG(salary)
FROM employees
GROUP BY department_id,job_id;
#下面是错误的
SELECT department_id,job_id,AVG(salary)
FROM employees
GROUP BY department_id;
#结论:select中出现的非组函数的字段必须声明在group by中
#反之,group by声明的字段可以不出现在select中
SELECT department_id,AVG(salary)
FROM employees
GROUP BY department_id WITH ROLLUP;
#查询各个部门的平均工资,按照平均工资升序排列
SELECT department_id,AVG(salary) avg_sal
FROM employees
GROUP BY department_id
ORDER BY avg_sal ASC;
#having 作用:是用来过滤数据的,以前学过过滤数据的where,having与group by有关
#查询各个部门中最高工资比10000高的部门信息
#要求一:一旦过滤条件中出现了组函数group by,聚合函数,则过滤条件必须用having替换,不能使用where;
#要求二:having必须声明在group by的后面,having必须与group by一起使用
#下面这个是错误的:如果有两个条件,where与having可以同时使用
SELECT department_id,MAX(salary)
FROM employees
WHERE MAX(salary)>10000
GROUP BY department_id;
#下面这个正确
SELECT department_id,MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary)>10000;
#查询部门id为10,20,30,40这四个部门中最高工资比10000高的部门信息
#方式一
SELECT department_id,MAX(salary)
FROM employees
WHERE department_id IN(10,20,30,40)
GROUP BY department_id
HAVING MAX(salary)>10000;
#方式二
SELECT department_id,MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary)>10000 AND department_id IN(10,20,30,40);
边栏推荐
- 【uni-app】uni-app中scroll-into-view的使用
- 南京邮电大学CTF题目writeup (二) 含题目地址
- Cad-gis data conversion
- 书籍-聪明的投资者
- 结果填空 第39级台阶(递归*C语言)
- Books - social animals
- 结果填空 奖券数目(dfs * 数学公式)
- 预告来袭:【豆冰冰】发.售,现.金.抽.奖等你来拿
- (php毕业设计)基于php在线旅游网站管理系统获取
- Review of metallurgical physical chemistry -- Fundamentals of metallurgical reaction kinetics and characteristics of multiphase reaction kinetics
猜你喜欢
随机推荐
NSCTF-web题目writeup
记某淘宝客软件分析拿库思路
正则表达式
Interface idempotency problem
蓝桥杯 方格填数
(PHP graduation project) obtained based on PHP student homework submission management system
(php毕业设计)基于php校园网络报修管理系统获取
Time setting in curd component
7月7日国风廿四节气《小暑》来袭!!附..合..成..预..告..
结果填空 购物单(教你用Excel解决)
ArcGIS之Model Builder
ArcMap中的距离工具条(Distance)
Making E-R diagram based on XMIND
Apache Log4j任意代码执行复现
浅拷贝、深拷贝区别
ArrayList multithreading security solution
JS中的!!
单调队列,洛谷P1886 滑动窗口
Progressive enhancement and graceful degradation
结果填空 煤球数目









