网站首页 > 技术文章 正文
· 列函数
· 常用列函数的使用
· 分组
· 分组的概念
· GROUP BY 子句的使用
· HAVING子句的使用
常用的列函数:
SUM(expression) 求和
MAX(expression) 求最大值
MIN(expression) 求最小值
COUNT(expression) 统计记录数
COUNT(DISDINCT COLNAME) 统计去除重复记录数
查询员工的记录数,员工工资的总和,平均工资,最高工资,最低工资
分组的概念
在一个实体集bank_emp当中,每个实体(也就相当于一条记录)都有它自己的属性
可以按不同的属性来行分组
比如:在一教室里有很多个学生,如果按性别来分组的话,是不是就可以
分为男生和女生
语法格式:
SELECT 列名....,列函数
FROM 表名 ......
WHERE 条件 ......
GROUP BY 列名......
ORDER BY 列名......
查询每个部门的人数
记住的规则:
如果在SELECT子句中,有不在列函数中的列,则该列一定要
出现在GROUP BY 之后
练习
查询每个部门的平均工资
查询每个部门的年薪
分组查询HAVING子句的使用
显示出平均工资大于4000的部门编号和平均工资
?为什么不能用WHERE来指定查询条件 from
//查出平均工资大于2000的部门
SQL> select deptno,avg(sal) avg from emp
group by deptno where avg >2000; (错)
SQL> select deptno,avg(sal) avg from emp
group by deptno having avg >2000; (对)
解释:
group by后不能再接where子句过滤 ;
where过滤只能加到group by 前面;
对分组后的过滤要使用having
rollup 和 cube
group by 生成数据结果时;只会生成相关列的数据统计信息;
而不是生成小计和总计;
SQL> select deptno,job,avg(sal) from emp group by deptno,job;
rollup
在保留group by统计结果的基础上,
还会生成横向小计(部门平均工资)和总计(所有员工的平均工资)
SQL>select deptno,job,sum(sal) from emp group by rollup(deptno,job);
cube
是在group by rollup 的基础上,再做出纵向小计:
SQL> select deptno,job,sum(sal) from emp group by cube(deptno,job);
练习
显示非办事人员(CLERK)工作名称,以及从事同一工作雇员的月工资
的总和,并且要满足雇员的月工资合计大于5000,输出结果按月工资
合计升序排序
--查询员工的记录数,员工工资的总和,平均工资,最高工资,最低工资
SELECT COUNT(empno), ---记录数
SUM(sal), ---工资求和
AVG(sal), --平均工资
MAX(sal), --最大工资
MIN(sal) --最小工资
FROM bank_emp
--使用分组来统计每个部门的人数
SELECT deptno,COUNT(empno),SUM(sal) FROM emp
GROUP BY deptno;
--记住的规则:如果在SELECT子句中,有不在列函数中的列,则该列一定要
--出现在GROUP BY 之后
--练习
-- 查询每个部门的平均工资
SELECT deptno,AVG(sal) FROM emp
GROUP BY deptno;
-- 查询每个部门的年薪
SELECT deptno,SUM(sal*12) FROM bank_emp
GROUP BY deptno;
--分组查询HAVING子句的使用
--显示出平均工资大于8000的部门编号和平均工资
SELECT deptno,AVG(sal) FROM bank_emp
GROUP BY deptno
HAVING AVG(sal)>8000
select deptno,avg(sal) avg from emp
group by deptno where avg >2000;
---总计与小计
SELECT deptno,job,AVG(sal) FROM bank_emp
GROUP BY rollup(deptno,job)
SELECT deptno,job,SUM(sal) FROM bank_emp ---列小计
GROUP BY CUBE(deptno,job)
--练习EMP
-- 显示非办事人员(CLERK)工作名称,以及从事同一工作雇员的月工资
-- 的总和,并且要满足雇员的月工资合计大于5000,输出结果按月工资
-- 合计升序排序
SELECT job,SUM(sal)
FROM emp
WHERE job <> 'CLERK'
GROUP BY job
HAVING SUM(sal)>5000
ORDER BY SUM(sal)
猜你喜欢
- 2024-11-05 超实用!手把手入门 MongoDB:这些坑点请一定远离
- 2024-11-05 T-SQL语句基础-增删改查 sql的增删改查指什么
- 2024-11-05 「计算机组成原理」:一文快速了解计算机原理知识点-附思维导图
- 2024-11-05 大数据分析师工程师入门6-HIVE进阶
- 2024-11-05 性能优化技巧:有序归并 有序表的归并算法
- 2024-11-05 java juc forkjoin 并行流计算详解
- 2024-11-05 《从实践中学习oracle/SQL》读书笔记 3
- 2024-11-05 MySQL常用函数详解,内含示例 mysql常用函数详解,内含示例分析
- 2024-11-05 word中最实用的办公技巧——神奇的F4,让你省时省力,效率翻倍
- 2024-11-05 mysql分组查询详解(group by & having)
你 发表评论:
欢迎- 622℃几个Oracle空值处理函数 oracle处理null值的函数
- 614℃Oracle分析函数之Lag和Lead()使用
- 602℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 598℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 594℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 587℃【数据统计分析】详解Oracle分组函数之CUBE
- 575℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 563℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)