0

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;

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

4

2 回答 2

1

我猜问题是Oracle SQL 不能正确支持布尔表达式。但是如果 id>3 则返回 1 ,否则返回 0 ,case 表达式应该可以工作。

case when (i >3) then 1
else 0
end 
于 2012-08-20T10:14:23.453 回答
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
于 2012-08-20T13:29:17.980 回答