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;
记录表达式的语法?我可以使用“大于”表达式来分区记录集吗?
答案 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