ORA-00923 error: FROM keyword not found where expected

ORA-00923 error: FROM keyword not found where expected

在 Oracle DB 上计算保留时,我写了这段代码:

select 
sessions.sessionDate , 
count(distinct sessions.visitorIdd) as active_users, 
count(distinct futureactivity.visitorIdd) as retained_users,
count(distinct futureactivity.visitorIdd) / count(distinct sessions.visitorIdd)::float as retention
FROM sessions
left join sessions futureactivity on
sessions.visitorIdd=futureactivity.visitorIdd
and sessions.sessionDate = futureactivity.sessionDate - interval '3' day
group by 3;

但我总是收到错误:"ORA-00923: mot-clé FROM absent à l'emplacement prévu"(ORA-00923 FROM 关键字未在预期位置找到) 你能帮帮我吗?

Oracle 无法识别 Postgres 的 :: 语法,因此它抱怨在预期的位置找不到缺少的 FROM 关键字。

改用强制转换:

count(distinct futureactivity.visitorIdd) / cast(count(distinct sessions.visitorIdd) as float) as retention

这是一种更 "Oracle" 的查询编写方式:

select s.sessionDate , 
       count(distinct s.visitorIdd) as active_users, 
       count(distinct fs.visitorIdd) as retained_users,
       count(distinct fs.visitorIdd) / count(distinct s.visitorIdd) as retention
from sessions s left join
     sessions fs
     on s.visitorIdd = fs.visitorIdd and
        s.sessionDate = fs.sessionDate - interval '3' day
group by s.sessionDate
order by s.sessionDate;

备注:

  • Oracle 不需要整数除法转换。
  • group by应该是列名,实际上是“1”,不是“3”。
  • 更短的 table 别名使查询更易于编写和阅读。
  • 您可能需要 order by,因为结果的顺序不确定。
  • 使用 window 函数可能有更好的方法来编写此查询。