加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle内置函数

发布时间:2020-12-12 14:31:53 所属栏目:百科 来源:网络整理
导读: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. 分析函数——GROUPING GROUPING函

1.Oracle分析函数——CUBEROLLUP

功能描述:

如果是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.分析函数——GROUPING

GROUPING函数的作用是放总记
如一个公司有多个部门,一个部门有多个岗位,一个岗位上有多个人
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'

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读