别名无法在 where 子句中使用

Alv*_*001 1 sql oracle rank

create table tab1(sno int, name varchar(30), age int);

insert into tab1 values(1, 'abc1', 22);
insert into tab1 values(2, 'abc2', 23);
insert into tab1 values(3, 'xyz', 28);
insert into tab1 values(4, 'abc3', 26);
insert into tab1 values(5, 'abc4', 25);

select sno, name, age, rank() over (order by sno) as ranking from tab1 where
ranking = trunc((select count(*)/2 from tab1)) + 1; //This query is giving error
Run Code Online (Sandbox Code Playgroud)

错误是 ORA-00904: "RANKING": 无效标识符

小智 5

您正在尝试根据完成所有过滤后计算的值来过滤选择的结果。你需要把它改成这样:

select * from (
  select sno, name, age, rank() over (order by sno) as ranking from tab1 
) where ranking = trunc((select count(*)/2 from tab1)) + 1;
Run Code Online (Sandbox Code Playgroud)