08-oracle统计函数(单组分组函数)
--count时尽量count(列名),count(*)也可以。
--count,max,min,sum,avg,median(中位数)
select count(empno),count(distinct job),max(hiredate),min(hiredate),sum(sal),round(avg(sal),2)
from emp;

--median:中位数(中间值),一组按大小顺序排列的数据,处于中间位置的数。
--行数为奇数时取中间行的数值(19行/2取9行的值),偶数时取中间2行数值的平均值(若18行则中位数的值为(9行+10行)除以2)。
--如sal共15行,第8行即中位数(中间值)
select median(sal) from emp;
--使用group by统计每个部门的人数
select deptno,count(deptno)
from emp
where deptno is not null
group by deptno;

--group by 以职位分组,查询出每个职位的最低和最高工资
select job,min(sal),max(sal)
from emp
group by job;


--数据统计时,语句中没有group by时,select的选项只能出现统计函数(count(),sum(),max(),min(),avg());

--数据统计时,语句中有group by时,select的选项只能出现统计函数和group by排序使用的分组字段(即列名);
select job,count(ename) from emp group by job;

--数据统计时,使用嵌套函数时,无论与剧中有没有group by ,select选项中只允许出现嵌套行数,其它字段均不允许出现。

--重复的列可以进行分组(GROUP BY),SQL语句执行顺序为FROM,WHRER,GROUP BY,SELECT,ORDER BY
--查询部门名称,部门人数,平均工资,平均工作年限
SELECT D.DNAME 部门名称,count(ename)部门人数,ROUND(AVG(SAL),2)平均工资,ROUND(AVG(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12),2)平均工作年限
FROM EMP E FULL OUTER JOIN DEPT D ON( E.DEPTNO=D.DEPTNO)
GROUP BY D.DNAME;

--查询工资各个等级工资的雇员人数,平均工资
SELECT TRIM(S.GRADE),DECODE(S.GRADE,1,'A',2,'B',3,'C',4,'D',5,'E') 工资等级,COUNT(E.ENAME) 雇员人数,ROUND(AVG(E.SAL),2) 平均工资
FROM EMP E,SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL
GROUP BY S.GRADE
ORDER BY 工资等级

--查询领取佣金和不领取佣金的平均工资,平均工作年限,雇员人数
SELECT '不领取佣金',AVG(SAL)平均工资,ROUND(AVG(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12),2)平均工资年限,COUNT(EMPNO)雇员人数
FROM EMP E WHERE E.COMM IS NULL
UNION
SELECT '领取佣金',AVG(SAL)平均工资,ROUND(AVG(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12),2)平均工资年限,COUNT(EMPNO)雇员人数
FROM EMP E WHERE E.COMM IS NOT NULL;

--多字段分组

--GROUP BY 字段1,字段2
--查询部门详细信息:部门名称,部门编号,部门位置,平均工资,总工资,雇员人数
SELECT D.DNAME,D.DEPTNO,D.LOC,ROUND(AVG(E.SAL),2),SUM(SAL),COUNT(E.ENAME)
FROM DEPT D,EMP E
WHERE D.DEPTNO=E.DEPTNO(+)
GROUP BY D.DNAME,D.DEPTNO,D.LOC;


--HAVING 必须和GROUP BY一起使用
--查询所有平均工资大于2000的职位信息,平均工资,雇员人数
SELECT E.JOB,ROUND(AVG(SAL),2),COUNT(E.ENAME)
FROM EMP E
GROUP BY E.JOB
HAVING AVG(SAL)>2000;

--查询不包含销售的的工作名称,从事同一工作的雇员工资总和,且工资大于5000,并按照从低到高排序
select E.JOB,SUM(E.SAL) A
from emp e
where e.job !='SALESMAN'
GROUP BY E.JOB
HAVING SUM(E.SAL)>5000
ORDER BY A DESC;

08-oracle统计函数(单组分组函数)的更多相关文章
- Oracle的“ORA-00937: 不是单组分组函数” 如何解决?
之前在编写oracle的sql语句时遇到这个问题,这里做个记录 问题描述:ORA-00937: 不是单组分组函数 问题原因:select语句中又在查询某一列的值,其中还有聚合函数 原先本人编写SQL是 ...
- Oracle报错:不是单组分组函数
报错:不是单组分组函数 实例:select sum(HWJZ) ,rq from JcChargeInfo 原因: 1.如果程序中使用了分组函数,则有两种情况可以使用: 程序中存在group by, ...
- Error:ORA-00937: 非单组分组函数错误
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/istend/article/details/34429721 ORA-00937: 非单组分组函数错 ...
- ORA-00937:不是单组分组函数_Oracle
Demo: SELECT USER_ID, USER_NAME, USER_SEX, MAX(USER_AGE), SUM(USER_MONEY) AS USER_MONEY USER_TEL, US ...
- Oracle - 查询语句 - 分组函数
/* 分组函数 不能再select子句中出现普通的列,除非这个列在group by中给出 所有的空值都会被分为一组 分组过滤 SELECT FROM WHERE GROUPBY HAVING ORDE ...
- Oracle系列六 分组函数
分组函数作用于一组数据,并对一组数据返回一个值. 组函数类型 AVG COUNT MAX MIN STDDEV SUM 组函数语法 SELECT [column,] group_function(co ...
- 逆袭之旅DAY14.东软实训.Oracle.多表连接、分组函数、子查询
2018-07-10 08:29:55 思考应用场景 异常数据的测试 6.显示能挣得奖金的雇员的姓名.工资.奖金,并以工资和奖金降序排列.select ename,sal,commfrom empWH ...
- oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数
花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用ora ...
- oracle 分组函数执行分析
先上例了: select job as "JOB1", avg(sal) as "avg sal" from scott.emp group by " ...
随机推荐
- 从零开始学习前端JAVASCRIPT — 11、JavaScript运动模型及轮播图效果、放大镜效果、自适应瀑布流
未完待续...... 一.运动原理 通过连续不断的改变物体的位置,而发生移动变化. 使用setInterval实现. 匀速运动:速度值一直保持不变. 多物体同时运动:将定时器绑设置为对象的一个属性. ...
- 编写高质量代码改善C#程序的157个建议——建议135: 考虑使用肯定性的短语命名布尔属性
建议135: 考虑使用肯定性的短语命名布尔属性 布尔值无非就是True和False,所以应该用肯定性的短语来表示它,例如,以Is.Can.Has作为前缀. 布尔属性正确命名的一个示例如下: class ...
- 团体程序设计天梯赛L1-023 输出GPLT 2017-03-22 17:56 39人阅读 评论(0) 收藏
L1-023. 输出GPLT 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个长度不超过10000的.仅由英文字母构成的 ...
- git 恢复被修改的文件
恢复到最后一次提交的改动: git checkout filename 如果该文件已经 add 到暂存队列中,恢复文件: git reset HEAD filename
- sql 的REPLACE
REPLACE 用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式. 语法 REPLACE ( 'string_expression1' , 'string_expression2 ...
- MVC4 路由解析 同名Controller的解决方案
通常我们在MVC中通过Area建立子站的时候会有 controller名称重复的情况,这是后如何区分路由优先级, 我们知道 在Route对象中存在RouteValueDictionary 类型的Dat ...
- Android-自定义RadioButton
1.控件RadioButton需要用RadioGroup包裹起来,才能使用2.RadioButton必须设置ID才能实现单选功能3.RadioGroup有方向(垂直方向 和 水平方向)默认是垂直方向 ...
- Android-ListView-ArrayAdapter
我在上一篇博客中Android-动态添加控件到ScrollView,写到可以用Java动态添加控件到Scrollview的孩子LinearLayout里面去,这种方式是不合理的,因为这种方式是一次性把 ...
- EasyFastCMS系列教学课程——2、底层代码 ModelHelper与SQLHelper简介
从本节课开始,我们开始逐步正式进入实际的编码过程中.本节课的核心内容为SQLHeelper和ModelHelper两个核心类库的介绍. SQLHelper这个类相信大家都很熟悉了,他是微软petsho ...
- webapi之权限验证
webapi之权限验证 一.概念: 二.demo: 1.登录时生成token: FormsAuthenticationTicket token = , account, DateTime.Now, D ...