2017-05-31 177 views
0

我有一個PostgreSQL表,其中包含1,634個記錄,每個位置有一個「id」,每個災難事件受災人數爲「disaster(n)_a」列,針對第二次災難事件的標準化受影響人數的「disaster2_an」列。PostgreSQL - 使用AVG,MAX和MIN進行規範化

id | disaster1_a | disaster2_a | disaster2_an 
-------------------------------------------------- 
1234567|  27  |  30  |  0 
5687428|  58  |  87  |  0 
5874658|  88  |  458  |  0 
....... 

爲了更新「disaster2_an」,我必須來計算使用這兩種災害事件受影響的人的數據每個位置受影響人的標準化的數字。如何輸入以下函數作爲將更新列「disaster2_an」的SQL語句?

disaster2_an = (disaster2_a - AVG(disaster2_a, disaster1_a))/ 
(MAX(disaster2_a, disaster1_a) - MIN(disaster2_a, disaster1_a)) 

回答

1

我能找到我的問題的答案。我剛剛用GREATEST()和LEAST()分別替換了MAX()和MIN(),並執行了獲取平均值的手動方法。

UPDATE TABLE tbl1 
    SET disaster2_an = (disaster2_a - ((disaster2_a + disaster1_a)/2))/(GREATEST(disaster2_a, disaster1_a) - LEAST(disaster2_a, disaster1_a));