【发布时间】:2020-08-25 14:47:13
【问题描述】:
我比较两个选择的结果并得到 1 或 0 作为最终结果。 下面的查询语法很好,但是这个查询会导致超时。
SELECT (CASE WHEN (
select count(*) from order where ordered_date > (NOW() - INTERVAL '120 minutes')
and order_ordered = current_date) >
(select count(*)/3
from order
where ordered_date > (NOW() - INTERVAL '2 days' - INTERVAL '120 minutes')
and ordered_date < (NOW() - INTERVAL '2 days'))
THEN 1 ELSE 0 end);
因此,我尝试优化查询以对每个选择使用别名,如下所示:
select (case when a > b then 1 else 0 end) from (select count(*) from order where ordered_date > (NOW() - INTERVAL '120 minutes')
and order_ordered = current_date) as a,
from (select count(*)/3
from order
where ordered_date > (NOW() - INTERVAL '2 days' - INTERVAL '120 minutes')
and ordered_date < (NOW() - INTERVAL '2 days'))as b;
我在“from”附近有语法错误,在我的记忆中这种语法适用于 mysql。 你能否告诉我是否有可能通过在 Postgresql 上使用别名来使用两次“来自”,或者如果你知道我是一个接受者的另一种可能性。
示例:
第一个查询给出:select count(*) from order where ordered_date > (NOW() - INTERVAL '120 minutes') and order_ordered = current_date -> 60
第二个查询给出:select count(*)/3 from order where ordered_date > (NOW() - INTERVAL '2 days' - INTERVAL '120 minutes') and ordered_date < (NOW() - INTERVAL '2 days') -> 20
最终条件:case when (60 > 20 then 1 else 0 end)
预期结果:1
谢谢
【问题讨论】:
-
您不能只采用 MySQL 语法并在 Postgres 查询中使用它。除此之外,将示例输入数据与所需的输出一起包含在内将对您的问题有很大帮助。
-
@TimBiegeleisen,我添加了更多解释。提前致谢
标签: postgresql