我想實現我在代碼中作爲postgres查詢。 以下示例並不完全是我們正在嘗試執行的操作,但希望它顯示了我如何使用之前計算的行中的值。Postgres查詢:使用之前動態創建的列值在下
的試樣臺幫我證明我想要做的事:
test=# select * from test ;
id | field1 | field2 | field3 | score
----+--------+--------+--------+-------
1 | 1 | 3 | 2 | 1.25
2 | 1 | -1 | 1 |
3 | 2 | 1 | 5 |
4 | 3 | -2 | 4 |
這裏正在進行的查詢:
select id,
coalesce (
score,
case when lag_field3 = 2 then 0.25*(3*field1+field2) end
) as new_score
from (
select id, field1, field2, field3, score,
lag (field3) over (order by id) as lag_field3
from test
) inner1 ;
它返回什麼,我想那麼遠,
id | new_score
----+-----------
1 | 1.25
2 | 0.5
3 |
4 |
查詢的下一次迭代:
select id,
coalesce (
score,
case when lag_field3 = 2 then 0.25*(3*field1+field2) end,
case when field1 = 2 then 0.75 * lag (new_score) end
) as new_score
from (
select id, field1, field2, field3, score,
lag (field3) over (order by id) as lag_field3
from test
) inner1 ;
的區別是:
case when field1 = 2 then 0.75 * lag (new_score) end
我知道和明白爲什麼這是行不通的。
我已經計算出的字段作爲new_score的別名,當field1 = 2時,我想0.75 *前面的行new_score值。 我知道new_score是別名,不能使用。
有什麼方法可以完成這個嗎?我可以試着複製這個表達式,在它周圍加一個滯後,別名作爲別的東西,然後嘗試去處理,但那會變得非常混亂。
任何想法?
非常感謝。
請提供的disred輸出最終查詢和創建表所需的查詢。 – pietrop