2017-05-31 5 views
0

J'ai une table PostgreSQL qui contient 1 634 enregistrements avec un "id" pour chaque emplacement, "disaster (n) _a" colonnes pour le nombre de personnes affectées par événement de catastrophe, et une colonne "disaster2_an" pour le nombre normalisé de personnes affectées pour le deuxième événement catastrophique.PostgreSQL - Normalisation en utilisant AVG, MAX et MIN

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

Afin de mettre à jour « disaster2_an », je dois calculer le nombre normalisé de personnes affectées par emplacement en utilisant les données des personnes concernées dans les deux événements de catastrophe. Comment puis-je entrer la fonction suivante en tant qu'instruction SQL qui mettra à jour la colonne "disaster2_an"?

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

Répondre

1

J'ai été capable de trouver une réponse à ma question. J'ai juste remplacé MAX() et MIN() avec GREATEST() et LEAST() respectivement, et effectué la méthode manuelle pour obtenir la moyenne.

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