oracle 这个SQL语句 over 用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 这个SQL语句 over 用法相关的知识,希望对你有一定的参考价值。

select ename,sal,row_number() over (order by sal desc) rn from emp where rn >6 and rn <10
为什么 "RN": 标识符无效?
over按指定的字段分组排序 为什么这里错误了?

参考技术A 因为RN不是EMP表的字段,从这个角度看不能直接用作Where语句的条件字段,而开窗函数不能用于Where语句,所以,要实现你希望的功能,只能嵌套From子查询了。 参考技术B select ename,sal,rn
from (select ename,sal,row_number() over (order by sal desc) rn from emp )
where rn >6 and rn <10

要用子查询才可以用自定义字段名称

而且你也没有分组,用下面的
select ename,sal,rn
from (select ename,sal,row_number() over (partion by ename order by sal desc) rn from emp)
where rn >6 and rn <10本回答被提问者采纳
参考技术C 这里,在where语句中,用到的字段不能是虚拟字段,必须是实际存在的。
你可以写成:
select *
from ( select ename,sal,row_number() over (order by sal desc) rn from emp ) a
where rn >6 and rn <10

oracle if 语句

能不能进行多个条件判定
if 条件1,条件2,。。。 then
如果能 具体是怎么写的
我说的是一次进行多次判定
就是必须满足两个以上条件
这个要怎么办?

IF 条件1 and 条件2 THEN

ELSIF 条件3 and 条件4 THEN

ELSIF .. THEN

ELSE

END IF;

或者:

IF 条件1 or条件2 THEN

ELSIF 条件3 or条件4 THEN

ELSIF .. THEN

ELSE

END IF;
参考技术A 用case语法
select
(case
when 1=2 then 'A'
when 2=2 then 'B'
end) from dual
参考技术B SELECT AVG(CASE WHEN e.salary > 2000 THEN e.salary
ELSE 2000 END) "Average Salary" FROM employees e;

SELECT cust_last_name,
CASE credit_limit WHEN 100 THEN 'Low'
WHEN 5000 THEN 'High'
ELSE 'Medium' END
FROM customers;

以上是关于oracle 这个SQL语句 over 用法的主要内容,如果未能解决你的问题,请参考以下文章

请教Oracle计算同比和环比sql语句

oracle 中SQL 语句开发语法 SELECT INTO含义

javaweb连接sql、oracle的详细过程和用法

oracle sql rank函数取排序值

sql语句中as的用法和作用

ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法