如何使用“大于”表达式使用Oracle分析分区?

时间:2012-08-20 10:07:36

标签: sql oracle select

Oracle文档说我可以使用:

select avg(id) over (partition by <expression>) from table1;

例如,这很顺利:

select avg(id) over (partition by id) from table1;

但如果我使用“大于”表达式,我就会失败ORA-00907:

select avg(id) over (partition by (id > 3)) from table1;

记录表达式的语法?我可以使用“大于”表达式来分区记录集吗?

2 个答案:

答案 0 :(得分:1)

我想问题是Oracle SQL没有正确支持布尔表达式。但是如果id> 3,那么case表达式应该返回1,否则返回0。

case when (i >3) then 1
else 0
end 

答案 1 :(得分:0)

要使用这些表达式,我总是将变量放在子查询中:

select avg(id) over (partition by whichid)
from (select t.*, (case when id > 3 then 'low' else 'high' end) as whichid
      from table1 t
     ) t