如何在SQL查询条件中存储中间结果

问题描述 投票:0回答:2
    select id, (sum(col2) - sum(col1)) as net_col1_col2
    from data4sim
    where end_time <= :input_time
    and (sum(col2) + sum(col1)) > 0
    and (
      (sum(col1) + sum(col2))
      <= abs(coalesce(col3, 0) - (col4 - (sum(col2) - sum(col1)))) + :EPS
    )
    group by id

这是我第一次使用 SQL,我正在尝试编写一个以上述条件为条件的查询。我注意到我正在计算

(sum(col1) + sum(col2))
(sum(col2) - sum(col1))
两次,并且我不确定如何存储中间结果,以便我可以在第二次中重用它。

我可以做这样的事情吗:

where time < :input_time
  and (sum(col1) + sum(col2)) as temp
  and (temp > 0)
  and (temp < col3) <= ....

我认为总的来说,我不知道如何在条件中存储中间结果。

sql sqlite
2个回答
1
投票

在 sqlite 中,您可以在 SELECT 子句中为列添加别名,然后在 HAVING 子句中引用该别名(这是您应该移动基于聚合构建的条件(如

SUM()
)的位置。

CREATE TABLE test (id integer, val1 integer, val2 integer);
INSERT INTO test (id, val1, val2) VALUES (1,1,5);
INSERT INTO test (id, val1, val2) VALUES (2,3,6);
INSERT INTO test (id, val1, val2) VALUES (3,5,7);

SELECT SUM(val1 + val2) as derived_col
FROM test
WHERE id IN (1,2)
HAVING derived_col > 3;

dbfiddle 在这里


1
投票

我不知道你的数据,但类似这样的事情应该可以做到:

select id, 
       (sum(col2) - sum(col1)) as net_col1_col2,
       (sum(col2) + sum(col1)) as total
from data4sim
where end_time <= :input_tum    
group by id
having total > 0
   and total <= abs(coalesce(col3, 0) - (col4 - net_col1_col2)) + :EPS

您可以在

select
子句中使用
having
中的别名。

© www.soinside.com 2019 - 2024. All rights reserved.