统计这两组的总人数,
--思路:将需要被看做一组,但值又不同的那些数据,我们使用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;