ORA-00923 错误:在预期的地方找不到 FROM 关键字
Posted
技术标签:
【中文标题】ORA-00923 错误:在预期的地方找不到 FROM 关键字【英文标题】:ORA-00923 error: FROM keyword not found where expected 【发布时间】:2016-10-16 10:19:05 【问题描述】:在计算 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 缺席 à l'emplacement prévu”(ORA-00923 FROM 关键字未在预期的地方找到) 你们能帮帮我吗?
【问题讨论】:
【参考方案1】:Oracle 无法识别 Postgres 的 ::
语法,因此它抱怨在预期的地方找不到缺少的 FROM
关键字。
改用演员表:
count(distinct futureactivity.visitorIdd) / cast(count(distinct sessions.visitorIdd) as float) as retention
【讨论】:
非常感谢,它成功了,但出现了另一个错误:/ 我正在关注此链接中的代码:periscopedata.com/blog/… 新的错误是:“ORA-00979: N'est pas une expression GROUP BY” 这个查询太多 Postgres,在 Oracle 中不起作用。理解它的工作原理,然后自己从头开始编写,比弄清楚翻译要好得多。 会的。非常感谢。感谢您的建议。【参考方案2】:这是一种更“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”。
较短的表别名使查询更易于编写和阅读。
您可能需要order by
,因为结果的顺序不确定。
使用窗口函数编写此查询可能有更好的方法。
【讨论】:
以上是关于ORA-00923 错误:在预期的地方找不到 FROM 关键字的主要内容,如果未能解决你的问题,请参考以下文章
错误:ORA-00923:在预期的地方找不到 FROM 关键字
ORA-00923: 使用 shell 脚本在预期的地方找不到 FROM 关键字