现在的位置: 首页 > 综合 > 正文

Oracle操作总结

2013年08月05日 ⁄ 综合 ⁄ 共 2402字 ⁄ 字号 评论关闭

聚合函数:
count sum max min avg
count返回的结果集中行的数目
sum max min avg顾名思义。但是要注意聚合函数强调的是"结果集中……",强调了
现在进行的操作对象是结果集
注意NULL不参与聚合函数的预算,要想其参加运算那么要将其转换为非空的值

分组:
在一个查询中需要进行多次统计就需要就必须使用分组

where是分组前过滤,过滤的是原始数据。这样就过滤掉了不必要的数据提高了效率

having是分组后过滤,过滤的是统计结果

先要弄明白:分组,分组 什么才叫一组——前提条件当然是相同的才叫一组

比如:班级同学分两组,按照性别来分。只有都是男性才会在同一组

老师的笔记说得很清楚:分组函数运算每一组记录,每一组返回一个结果
比如:select deptno,job,avg(sal) from emp group by deptno,job 把deptno,job相同的(其余字段不用多考虑,就以这两个为关键)算作一组
所以最后Oracle返回的是九行数据,即九个结果

注意按照某些字段分组后,已经是"组"的概念了,个体的特性已经消失了。
按照什么分组,那么当然可以从结果集中得到这些字段!!!比如按照城市分组,就可以得到每一组的城市名。
除了分组字段以外的字段,其余的字段只可以参与聚合运算(count sum max min avg)——当然,前提是可以使用具体的聚合
函数,比如不可以avg(name),因为那么根本就不是数字!!!!!!!!!!

再次强调:比如(在这里我们假设没有按照comm分组)员工编号是"9527"的comm(提成),但是可以得到平均的comm.
因为现在是以"组"的概念存在的。已经不存在个体了。

核心思想:分组以后个体的概念消失了,是"组"的概念。
比如这里有学生的 姓名,年纪,性别,身高
按照身高分组——相同的身高在一个组。那么当然可以select 身高,其余的只可以用聚合函数了
按照性别分组——相同的性别放在一个组。那么当然可以select 性别,其余的只可以用聚合函数了

还有一个很值得注意:要是涉及到聚合,分组的时候order by的字段也只能是分组里的字段!!!!!!!!!!!!!!

只要涉及到聚合函数就要想到分组!!!!!!!!!!!
要是前面出现了聚合函数,且后面没有涉及到group by 那么这是最特殊的分组。在select里任意一个具体字段都不可以使用。
只可以使用聚合函数

这里有一堆这两天敲的实验数据:

select * from emp
select job,count(*) from emp group by job having count(*)>3
select job "工种" from emp where job='CLERK'--正确的
select job "工种",count(job) "此工种人数" from emp group by job--正确的
select count(*) "此工种人数" from emp where job='CLERK'--正确的
select job "工种",count(*) "此工种人数" from emp where job='CLERK'--错误的
select job "工种",sum(comm) from emp group by job--正确的
select job "工种",avg(comm) from emp group by job--正确的
select job "工种",max(comm) from emp group by job--正确的
select job "工种",min(comm) from emp group by job--正确的
select job "工种",sal "工资",sum(comm) from emp group by job--错误的
select job "工种",avg(sal) "平均工资",sum(comm) from emp group by job--正确的
select job "工种",max(sal) "最高工资",sum(comm) from emp group by job--正确的
select job "工种",max(mgr) "管理者为",sum(comm) from emp group by job--正确的
select job "工种",sum(mgr) "测试",sum(comm) from emp group by job--正确的
select job "工种",max(ename) "ename最大值",sum(comm) from emp group by job--正确的

select job "工种",count(mgr) "测试",sum(comm) from emp group by job--正确的
select job "工种",count(ename) "测试",sum(comm) from emp group by job--正确的
select job "工种",count(hiredate) "测试",sum(comm) from emp group by job--正确的
--关于分组后的order
select job "工种",max(sal) "最高工资",sum(comm) from emp group by job order by job desc--正确的
select job "工种",max(sal) "最高工资",sum(comm) from emp group by job order by comm desc--错误的
select job "工种",max(sal) "最高工资",comm "提成",sum(comm) from emp group by job,comm order by comm desc--正确的

select * from emp
--1clerk null
--2sale  300
--3sale  500
--4man   null
--5sale  1400
--6man   null
--7man   null
--8ana   null
--9pre   null
--10sal   0
--11clerk null
--12clerk null

 

 

 

 

 

 

 

抱歉!评论已关闭.