Oracle_高阶函数

  1. Ratio_to_report

语法:RATIO_TO_REPORT ( ratio_expression ) OVER ( [ PARTITION BY partition_expression ] )

用途:ratio_to_report是一个分析函数,用来计算一个值在一个数据集中所占的比例。如果expr为null,则整个函数的值也会为null。 

这个数据由query_patition_clause决定,如果不写这个子句,这个函数会计算查询后返回的所有行。根据over窗口函数的作用区间,求出作用区间中的单个值在整个区间的总值的比重。ratio_to_report()括号中是分子,over()括号中就是分母,分母缺失就是整个占比。

注意

  1. expr表达式不能进行ratio_to_report函数的嵌套,但是可以使用其他的函数;
  2. 当sal的值乘以一个常数值的时候并不影响计算结果,计算结果与sal没有乘100的计算结果一致。
select ename,sal,depno,ratio_to_report(sal * 100) over(partition by deptno)

 from emp

over()中为空值时,表示占所有的百分比。

例子

--求每个月销售额占比

select area,month,sum(amount) amount,

       round(ratio_to_report(sum(amount)) over(partition by area),4) * 100 ||'%' area_pct

from testa

group by area, month;
--查询每个员工占所在部门的工资比例

select e.department_id,e.employee_id,e.salary,sum(e.salary) over(partition by e.department_id) sum_salary,

  round(ratio_to_report(e.salary) over(partition by e.department_id),4) * 100 || '%' ratio_salary

from employees e;

2. Coalsece

语法:Coalesce(expr1,expr2,...,exprn)

含义:coaleace返回参数列表中第一个非空表达式,必须指定最少两个参数,如果所有的参数都是null,则返回null.

oracle使用短路运算,它依次对每个表达式求值判断是否为空值,不是对所有表达式都求职后灾进行判断第一个非空值。

coalesce函数是nvl函数的扩展。可以使用coalesce函数替换一个case语句,

例;

Coalesce(expr1,expr2);

--等价于

Case when expr1 is not null

Then expr1

Else

Expr2

End;

注意:空值加任何值都是空值,空值乘以任何值都是空值,以此类推;

         所有表达式必须是相同类型的,或者可以隐性转换为相同的数据类型

空值相关的函数

Nvl

Nvl(commission_pct,0)

如果第一个参数为null,则返回第二个参数,如果第一个参数为非null,则返回第一个参数。

--示例:计算年薪(工资+提成)
Select last_name,salary,nvl(commission_pct,0),
(salary * 12) + (salary * 12 *nvl(commission_pct,0)) annual_salary
From employees
Where last_name=’Maltos’;

Nvl2

Nvl2()commission_pct,’sal_comm’,’sal’)

如果第一个参数为null,则返回第三个参数,如果第一个参数为非null,则返回第二个参数

--示例:

Select last_name,salary,commission_pct,

Nvl2(commission_pct,’sal+comm’,’sal’) income

From employees

Where department_id in(50,80);

Nullif

Nullif(length(firsy_name),length(last_name))

如果两个参数值相等,则返回null,如果两个参数不等,则返回第一个表达式值

--示例:

SELECT FIRST_NAME ,LENGTH(FIRST_NAME) "EXPR1",

       LAST_NAME, LENGTH(LAST_NAME) "expr2",

  nullif(length(first_name),length(last_name)) result

FROM EMPLOYEES;

If-THEN-ELSE------条件表达式

CASE语句(SQL标准,编写复杂)

--示例:

SELECT  LAST_NAME,JOB_ID,SALARY,

       CASE JOB_ID

WHEN 'IT_PROG'

THEN 1.10*SALARY

                   WHEN 'ST_CLERK'

THEN 1.15*SALARY

                 WHEN 'SA_REP'

THEN 1.20*SALARY

   ELSE SALARY END "REVISED SALARY"

FROM EMPLOYEES;

decode函数

DECODE(COL|EXPRESSION,SERACH1,RESULT1

[SEARCH2,RESULT1,...,]

[,DEFAULT])

如果 search1 = expression 则返回result1,如果 search2 = expression 则返回result2

DECODE函数的作用:它可以将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式。当然,如果未能与任何一个实参序偶匹配成功,则函数也有默认的返回值。 

区别于SQL的其它函数,DECODE函数还能识别和操作空值。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle的高阶SQL包括了一系列强大的功能和特性,可以帮助用户更高效地管理和查询数据库。以下是一些Oracle高阶SQL的特性和功能: 1. 子查询:Oracle支持在查询语句中嵌套子查询,可以在一个查询中使用另一个查询的结果作为条件或数据源。 2. 连接查询:通过使用JOIN关键字,可以将多个表连接起来,实现数据的联合查询。 3. 视图:视图是虚拟的表,它是基于一个或多个表的查询结果构建的。通过视图,可以简化复杂的查询操作,并提供更好的数据安全性。 4. 窗口函数:窗口函数是一种特殊的函数,它可以在查询结果集中进行计算,并返回每一行的结果。常见的窗口函数包括RANK、ROW_NUMBER、SUM等。 5. 分析函数:分析函数是一种用于在查询结果中进行分组和排序的函数。它可以对查询结果进行分区、排序和聚合操作,常见的分析函数包括LAG、LEAD、RANK等。 6. PL/SQL:PL/SQL是Oracle数据库的编程语言,它结合了SQL和过程化编程语言的特点,可以用于编写存储过程、触发器和函数数据库对象。 7. 索引:索引是一种数据结构,用于加快数据库查询的速度。Oracle支持多种类型的索引,包括B树索引、位图索引和哈希索引等。 8. 分区表:分区表是将大型表分割成更小的逻辑部分,以提高查询和维护的效率。Oracle支持基于范围、列表和哈希等方式进行表的分区。 9. 数据库链接:通过数据库链接,可以在一个数据库中访问另一个数据库中的数据。这对于跨数据库查询和数据共享非常有用。 10. 数据库安全性:Oracle提供了丰富的安全性功能,包括用户管理、角色管理、权限管理和数据加密等,以保护数据库的安全性和完整性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值