带有变量的SQLITE Case Expression避免对表达式进行双重评估

ppo*_*one 1 sql database sqlite

嗨,我有一个查询,其中表达式将在大多数情况下被评估两次.我只想评估一次.我想分配

CAST(ROUND(VOLUME - ((CAPACITY*1.0)/TIMEFRAME)*(STRFTIME('%s','now') - UPDATED_TIMESTAMP)) AS INT)
Run Code Online (Sandbox Code Playgroud)

变量,因此它不会被评估两次.我怎么能在一个SQL查询中执行此操作?

SELECT CASE
           WHEN CAST(ROUND(VOLUME - ((CAPACITY*1.0)/TIMEFRAME)*(STRFTIME('%s','now') - UPDATED_TIMESTAMP)) AS INT) > 0 THEN CAST(ROUND(VOLUME - ((CAPACITY*1.0)/TIMEFRAME)*(STRFTIME('%s','now') - UPDATED_TIMESTAMP)) AS INT)
           ELSE 0
       END
FROM BUCKETS;
Run Code Online (Sandbox Code Playgroud)

Rim*_*mas 7

您可以在子查询中计算表达式,然后在查询中使用它的name(expr):

SELECT CASE
           WHEN expr > 0 THEN expr
           ELSE 0
       END
FROM (
  SELECT
    -- add BUCKETS.*, here if you need other BUCKETS fields return to query
    CAST(ROUND(VOLUME - ((CAPACITY*1.0)/TIMEFRAME)*(STRFTIME('%s','now') - UPDATED_TIMESTAMP)) AS INT) AS expr 
  FROM BUCKETS
) b
Run Code Online (Sandbox Code Playgroud)