【问题标题】:Postgresql subqueries using a calculated column使用计算列的 Postgresql 子查询
【发布时间】:2021-08-30 18:45:51
【问题描述】:

我是这个平台的新手,需要使用我已经计算过的列来获取值。我知道我需要一个子查询,但对正确的语法感到困惑。

SELECT well_id, reported_date, oil,
  (EXTRACT(EPOCH FROM age(reported_date,
                          LAG(reported_date) OVER w))/3600)::int as hourly_rate,
                         (oil/hourly_rate)::double precision as six
                          FROM public.production
WINDOW w AS (PARTITION BY well_id ORDER BY well_id, reported_date 
             ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)

我得到的错误是 错误:列“hourly_rate”不存在 LINE 4: (oil/hourly_rate)::double precision as 6 ^ 提示:也许您的意思是引用列“production.hour_rate”。 SQL 状态:42703 人物:171 我明白...我尝试过括号,命名子查询和不同的策略。我知道这是一个语法问题,有人可以帮我一把。谢谢

【问题讨论】:

    标签: postgresql subquery


    【解决方案1】:

    我对您的表示法有点困惑,但似乎存在括号问题:您的 from 语句未链接到选择。

    在我看来,管理子查询的最好方法是写这样的东西:

    WITH query1 AS (
       select col1, col2
          from table1
    ),
    query2 as (
       select col1, col2
          from query1
       (additional clauses)
    ),
    select (what you want)
     from query2
    (additional statements)
    
    Then you can manipulate your data progressively until you have the right organisation of your data for the final select, including aggregations
    

    【讨论】:

    • 让我试一试。感谢您的帮助。我试了会回信。
    • 宾果游戏非常感谢你。这真的帮了很多忙。再次感谢您。
    【解决方案2】:

    您不能在选择列表中使用别名。您需要在列中包含原始计算。所以你更新后的查询看起来很像 -

    SELECT well_id, reported_date, oil,
           (EXTRACT(EPOCH FROM age(reported_date, LAG(reported_date) OVER w))/3600)::int as hourly_rate,
           (Oil/(EXTRACT(EPOCH FROM age(reported_date, LAG(reported_date) OVER w))/3600))::double precision as six
      FROM public.production
    WINDOW w AS (PARTITION BY well_id ORDER BY well_id, reported_date 
                 ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)
    

    【讨论】:

    • 谢谢这个解决方案也可以。珍惜你的时间
    猜你喜欢
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 2020-07-05
    • 2018-07-03
    • 1970-01-01
    • 2021-01-19
    相关资源
    最近更新 更多