oracle内置函数
1.Oracle分析函数——CUBE,ROLLUP功能描述: 如果是ROLLUP(A,B,C)的话,GROUP BY顺序 (A、B、C) (A、B) (A) 最后对全表进行GROUP BY操作。 如果是GROUP BY CUBE(A,C),GROUP BY顺序 (A、C) (A), (B、C) (B) (C),
2.分析函数——GROUPINGGROUPING函数的作用是放总记如一个公司有多个部门,一个部门有多个岗位,一个岗位上有多个人 Rollup(部门,工作岗位) sum(每人的工资) 当部门的GROUPING为0,工作岗位的GROUPING也为0时,说明是公司发的总工资,此时放公司总计 当部门的GROUPING为0,工作岗位的GROUPING也为1时,说明是部门发的总工资,此时放部门小记 当部门的GROUPING为1,工作岗位的GROUPING也为1时,显示的是某部门某职位的工资和计 SQL> SELECT department_id DEPTID,job_id JOB, 2 SUM(salary),254)"> 3 GROUPING(department_id) GRP_DEPT,254)"> 4 GROUPING(job_id) GRP_JOB 5 FROM employees 6 GROUP BY ROLLUP(department_id,job_id); 3.GROUPING SETS与GROUPING的作用是不同的 Oracle服务器计算GROUPING SETS子句中所有的组并将结果通过UNION ALL组合成一个结果集.GROUPING SETS的效果:1.只需要访问一次基表.2.不需要写很复杂的UNION语句. SELECT department_id,job_id,null manager_id,avg(salary) FROM employees GROUP BY (department_id,job_id) UNION ALL SELECT null department_id,manager_id,avg(salary) FROM employees GROUP BY (job_id,manager_id) 等同于 SQL> set autotrace on SQL> SELECT department_id, 2 manager_id,avg(salary) 3 FROM employees 4 GROUP BY GROUPING SETS ((department_id,job_id),(job_id,manager_id)); 4.Rank() 于Dense_rank() rank(),连续排名 dense_rank(),非连续排名 转载于:http://blog.csdn.net/cczz_11/article/details/6053539 ·查询各学生科目为Oracle排名(简单排名) selectsc.s_id,sc.s_name,sub_name,sc.score, rank() over(orderbyscoredesc)名次 fromt_score sc wheresub_name='Oracle' ·查询各学生各科排名(分区排名,分区非连续排名) selectsc.s_id,51)">rank() over (partitionbysub_nameorderbyscoredesc)名次 fromt_score sc
·查询各学生科目为Oracle排名(简单排名) selectsc.s_id,51)">rank() over(orderbyscoredesc)名次 fromt_score sc wheresub_name='Oracle'
·查询各科前2名(分区排名) ·类似:新闻表,求栏目点击率在前3位的新闻。 商品表,求各类别销售额在前10位的商品。 select * from ( select sc.s_id, dense_rank() over (partition by sub_name order by score desc)名次 from t_score sc ) x where x.名次<=2
·查询各学生科目为Oracle排名(简单排名) rank() over(orderbyscoredesc)名次 fromt_score sc 'Oracle' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |