设为首页 加入收藏

TOP

Oracle学习笔记之子查询(二)
2015-11-10 12:17:22 来源: 作者: 【 】 浏览:4
Tags:Oracle 学习 笔记 查询
统计这两组的总人数,


--思路:将需要被看做一组,但值又不同的那些数据,我们使用DECODE将他们改为相同的值即可。


SELECT DECODE(job,'MANAGER','VIP','ANALYST','VIP','OPERATIONS') NAME, COUNT(*) FROM emp


GROUP BY DECODE(job,'MANAGER','VIP','ANALYST','VIP','OPERATIONS');


SELECT deptno,dname FROM dept ORDER BY DECODE(dname,'OPERATIONS',1,'ACCPOUNTING',2,'SALES',3);


--按照部门分组,按照工资降序,产生组内连续唯一的数字:


SELECT ename,deptno,sal,ROW_NUMBER()OVER


(PARTITION BY deptno ORDER BY sal DESC)rank FROM emp;--rank函数与ROW_NUMBER的区别在于,进行排序的字段若值相同


--且他们在同一组时,那么他们得到的数字是相同的,但是,在下面的数字会有跳跃,RANK会生成组内不连续且不唯一的数字。


--DENSE_RANK()会产生一个连续唯一的


SELECT ename,deptno,sal, DENSE_RANK()OVER(PARTITION BY deptno ORDER BY sal DESC) rank FROM emp;


--集合操作中: 并集,将两个集合中的所有元素集合成一个集合 普通并集与全并集。


--全并集:会产生重复元素,两个集合都有的元素,会在合并后在新的集合中出现两次。


--交集:新的集合中只保留两个集合都有的元素


--差集:新的集合中只保存我有你没有的元素。


--差集


SELECT ename,job,sal FROM emp WHERE job ='MANAGER' MINUS SELECT ename,job,sal FROM emp WHERE sal>2500;


--普通并集


SELECT ename,job,sal FROM emp WHERE job ='MANAGER' UNION SELECT ename,job,sal FROM emp WHERE sal>2500;


--全并集


SELECT ename,job,sal FROM emp WHERE job ='MANAGER' UNION ALL SELECT ename,job,sal FROM emp WHERE sal>2500;


--交集


SELECT ename,job,sal FROM emp WHERE job ='MANAGER' INTERSECT SELECT ename,job,sal FROM emp WHERE sal>2500;


SELECT * FROM sales_tab;


SELECT year_id,month_id,day_id,SUM(sales_value) FROM SALES_TAB GROUP BY


GROUPING SETS((year_id,month_id,day_id),(year_id,month_id))


ORDER BY year_id,month_id,day_id;


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux环境中MySQL主从同步--添加.. 下一篇Oracle学习笔记之高级查询

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: