Oracle-DQL 5- 分组函数(多行函数)
分组函数(多行函数):
--针对表中的多行数据进行运算,返回一个结果
1.多行函数
--sum() 求和
SELECT SUM(sal) FROM emp;
--avg() 求平均值
SELECT AVG(sal) FROM emp;
--sum 和 avg 只能对数字类型进行运算
--count() 计数,非空值的行数
SELECT COUNT(empno),COUNT(*),COUNT(comm) FROM emp;
--max() 求最大值,min() 最小值
SELECT MAX(sal),MIN(sal) FROM emp;
--max 和 min 可以针对所有数据类型进行运算
SELECT MAX(hiredate),MIN(hiredate) FROM emp;
SELECT MAX(ename),MIN(ename) FROM emp;
--分组函数会忽略空值
SELECT AVG(comm),COUNT(comm) FROM emp;
SELECT SUM(comm)/COUNT(empno),SUM(comm)/COUNT(comm) FROM emp;
--使用nvl函数处理空值
SELECT AVG(NVL(comm,0)),COUNT(NVL(comm,0)) FROM emp;
--可以使用where字句限定分组函数的计算范围
--计算30号部门的平均工资
SELECT AVG(sal) FROM emp
WHERE deptno = 30;
2.group by子句
--计算每个部门的人数
SELECT deptno,COUNT(empno) FROM emp
GROUP BY deptno;
--如果select后面既有普通列又有分组函数,必须使用group by子句
--并且select后面的普通列必须出现在group by后面
--计算每个职位的工资之和
SELECT job,SUM(sal) FROM emp
GROUP BY job;
--多列分组
--查询每个部门各个职位的最低工资
SELECT deptno,job,MIN(sal),COUNT(*) FROM emp
GROUP BY deptno,job
ORDER BY deptno;
--查询每个部门工资超过2000的员工人数
SELECT deptno,COUNT(*) FROM emp
WHERE sal > 2000
GROUP BY deptno;
3.having子句
--having子句出现在group by后面
--使用group by不一定使用having,使用having则必须使用group by
--查询部门平均工资高于2000的部门
/*
where 子句中不能出现分组函数
SELECT deptno FROM emp
WHERE AVG(sal) > 2000
GROUP BY deptno;
*/
SELECT deptno,AVG(sal) FROM emp
GROUP BY deptno
HAVING AVG(sal) > 2000;
4.分组函数的嵌套
SELECT MAX(AVG(sal)) FROM emp
GROUP BY deptno;
--分组函数的嵌套不能和普通列一起查询
SELECT AVG(MAX(sal)) FROM emp
GROUP BY deptno;
【练习】
1.查询每个职位的职位名称及平均工资,按平均工资升序排列.
SELECT job,AVG(sal) FROM emp
GROUP BY job
ORDER BY AVG(sal);
2.查询每个部门的各个职位的平均工资,并按部门编号升序、平均工资降序排序。
SELECT deptno,job,AVG(sal) FROM emp
GROUP BY deptno,job
ORDER BY deptno,AVG(sal) DESC;
3.查询每个工资等级所对应的人数
SELECT s.grade,COUNT(e.ename)
FROM salgrade s,emp e
WHERE e.sal BETWEEN s.losal AND s.hisal
GROUP BY s.grade
ORDER BY s.grade;
4.查询EMP表,要求写一条sql语句统计出如下图所示结果
10号部门人数 20号部门人数 30号部门人数
------------ ------------ ------------
3 5 6
SELECT deptno,COUNT(*) FROM emp
GROUP BY deptno;
SELECT SUM(DECODE(deptno,10,1,0)) dept10,
SUM(DECODE(deptno,20,1,0)) dept20,
SUM(DECODE(deptno,30,1,0)) dept30
FROM emp;
Oracle-DQL 5- 分组函数(多行函数)的更多相关文章
- Oracle学习第三篇—多行函数
0 order by asc/desc 默认升序 order by 列的名字|表达式|别名|序号 把空放在后边:order by desc nulls last 1分组函数--会自动滤空值 count ...
- Oracle数据库sql 列转字符串行函数WMSYS.WM_CONCAT()
例.select TO_CHAR(WMSYS.WM_CONCAT(ID)) from patrol_data_content where patrol_unit_id = '1628D189543B ...
- Oracle_多行函数
Oracle_多行函数 多行函数min(),max(),count(),sum(),avg() --1.1统计公司的最高工资,最低工资和总人数 --对于null值直接略过,不做运算 --max ...
- oracle--单行函数和多行函数
单行函数 1.字符函数 函 数 功 能 示 例 结 果 INITCAP (char) 首字母大写 initcap ('hello') Hello LOWER (char) 转换为小写 lower ...
- DQL---条件查询、单行函数、多行函数、分组函数、数据类型
一.DQL 1.基本规则: (1)对于日期型数据,做 *,/ 运算不合法,可以进行 +, - 运算.比如给日期加一天或减一个月,结果仍为一个日期.两个日期间只能为减法,返回两个日期相差的天数,两个日期 ...
- oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数
花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用ora ...
- oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数
花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用oracle用 ...
- Oracle 中关于 Group By 子句与多行函数嵌套搭配使用的注意事项
目录 你需要知道的 啥叫单行函数 啥叫多行函数 如何理解这个概念 Group by 子句使用规则 看一道 071 考题 你需要知道的 提到 Group by 子句,你需要先理解一个东西:函数的分类.提 ...
- Oracle Day3 多行函数、多表查询
1.多行函数 Sum avg max min count 组函数具有滤空的作用(添加nvl屏蔽该功能) 分组group by 多行分组 分组过滤 where 和分组过滤的区别(having) 分组的增 ...
- [转]Oracle SQL函数pivot、unpivot转置函数实现行转列、列转行
原文地址:http://blog.csdn.net/seandba/article/details/72730657 函数PIVOT.UNPIVOT转置函数实现行转列.列转行,效果如下图所示: 1.P ...
随机推荐
- Remove Mapping
http://social.msdn.microsoft.com/forums/vstudio/en-US/ffa3aa15-1d61-4464-ac4a-7a812d073a67/remove-ma ...
- java 面试心得总结-BAT、网易
http://blog.csdn.net/sinat_26812289/article/details/50898693
- 两个字说清楚编程语言实质-Python基础前传(3)
大家都知道Python对于数据分析而言,意义重大.但对于运用Python来做数据分析的我们来说,学习一门编程语言,却有不小的难度:首先大部分伙伴不是计算机相关专业的科班出身,其次我们基本上也都没有程序 ...
- sudo 问题:sorry, you must have a tty to run sudo
写定时任务时候遇到 如下问题 To start backup... -- :: sudo: sorry, you must have a tty to run sudo The backup to c ...
- 修改checkbox样式-1
说明 使用伪类来对复选框进行样式修改.以下以最简单的一个样式修改为实例进行说明. 步骤介绍: 将一个label与复选框进行绑定,将两者放在同一个div下 调整 label的外部样式使其作为复选框的外形 ...
- LeetCode 328. 奇偶链表(Odd Even Linked List)
题目描述 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起.请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性. 请尝试使用原地算法完成.你的算法的空间复杂度应为 O ...
- Q窗口操作函数(窗口最大化,全屏,隐藏最大化最小化按钮)
//Qt主窗口没有最小化,最大化按钮且最大化显示 int main(int argc, char *argv[]) { QApplication a(argc, argv); TestQtForWi ...
- Qt图形测绘窗口部件介绍
Qt 图形测绘窗口部件,主要使用第三方窗口部件: 1.Qwt:http://qwt.sourceforge.net 开源免费 2.GraphPak: http://www.ics.com 收费 3. ...
- ansiblle---roles
使用ansible中的roles来管理主机. 剧本中的roles你现在已经学过 tasks 和 handlers,那怎样组织 playbook 才是最好的方式呢?简单的回答就是:使用 roles ! ...
- linux 基础学习常见问题
1.当命令行还在运行不能输入任何东西时,按ctrl+c 停掉那个正在运行.