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 函数可能有更好的方法来编写此查询。
在 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 函数可能有更好的方法来编写此查询。