当前位置:网站首页>第八章 聚合函数
第八章 聚合函数
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);
边栏推荐
- 结果填空 第39级台阶(递归*C语言)
- 截图传入后台
- null和undefined的区别
- 书籍-乌合之众
- Review of metallurgical physical chemistry -- Fundamentals of metallurgical reaction kinetics and characteristics of multiphase reaction kinetics
- Books - poor Charlie's classic
- Cookie、Session和Token的区别与联系
- regular expression
- (php毕业设计)基于php学生日常行为管理系统获取
- Flex elastic box item properties
猜你喜欢

MYSQL之搭建数据库系列(一)——下载MYSQL

基于Highcharts平台的桑基图(Sankey diagram)绘制

ArcMap中的距离工具条(Distance)

结果填空 国庆有几天是星期日(纯Excel解决)

南京邮电大学CTF题目writeup (二) 含题目地址

Books - social animals

Books - the art of lucid thinking

ArcGIS Engine Development Resources

(php毕业设计)基于php在线旅游网站管理系统获取

使用sourcetree推送仓库时 Failed to connect to www.google.com port 80: Timed out
随机推荐
Books - poor Charlie's classic
(php毕业设计)基于php小说网站管理系统获取
Microsoft edge browser plug-in (2)
HDU-1284:钱币兑换问题 推理+动态规划(dp)
Review of metallurgical physical chemistry -- cathodic polarization, overpotential, anode and anode process in metal electrodeposition
Cad-gis data conversion
Tornado初识
7月7日国风廿四节气《小暑》来袭!!附..合..成..预..告..
Screenshot transferred to the background
文件上传漏洞总结
微信公众号-授权登录
结果填空 国庆有几天是星期日(纯Excel解决)
Microsoft edge browser plug-in (1)
Zotero——一款文献管理工具
万变不离其宗-掌控者靶场之bluecms1.6漏洞
书籍-邓普顿教你逆向
结果填空 星系炸弹(Excel秒杀)
结果填空 啤酒和饮料
360兼容问题
Flex elastic box