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 ...
随机推荐
- 小米oj 反向位整数(简单位运算)
反向位整数 序号:#30难度:一般时间限制:1000ms内存限制:10M 描述 输入32位无符号整数,输出它的反向位. 例,输入4626149(以二进制表示为00000000010001101001 ...
- java 网络文件下载(并命中文名)
public void download(HttpServletRequest request, HttpServletResponse response){ //获取服务器文件 String fil ...
- Beta冲刺(1/5)
队名:new game 组长博客:戳 作业博客:戳 组员情况 鲍子涵(队长) 过去两天完成了哪些任务 验收游戏素材 学习Unity 2D Animation系统 接下来的计划 制作游戏需要的人物动画 ...
- python+selenium 切换至iframe
方法一: from selenium import webdriver driver = webdriver.Firefox() driver.switch_to.frame(0) # 1.用fram ...
- 【Spark机器学习速成宝典】推荐引擎——协同过滤
目录 推荐模型的分类 ALS交替最小二乘算法:显式矩阵分解 Spark Python代码:显式矩阵分解 ALS交替最小二乘算法:隐式矩阵分解 Spark Python代码:隐式矩阵分解 推荐模型的分类 ...
- mybatis 批量将list数据插入到数据库
随着业务需要,有时我们需要将数据批量添加到数据库,mybatis提供了将list集合循环添加到数据库的方法.具体实现代码如下: 1.mapper层中创建 insertForeach(List < ...
- 用Python写一个将Python2代码转换成Python3代码的批处理工具
之前写过一篇如何在windows操作系统上给.py文件添加一个快速处理的右键功能的文章:<一键将Python2代码自动转化为Python3>,作用就是为了将Python2的文件升级转换成P ...
- MySQL-插入更新 ON DUPLICATE KEY UPDATE
向数据库中插入一条记录,若该数据的主键值(UNIQUE KEY)已经在表中存在,则执行后面的 UPDATE 操作.否则执行前面的 INSERT 操作. 测试表结构 CREATE TABLE `flum ...
- java读取XML文件,及封装XML字符串
package com.yyl.text; import java.io.FileInputStream; import java.util.ArrayList; import org.junit.T ...
- ant-design-pro中引入bizcharts报错:BizCharts is not defined 解决
解决方法: 在config.js 中的 externals 配置项中进行了如下配置修改: externals: { '@antv/data-set': 'DataSet', // bizcharts: ...