2017-03-31 4 views
0

スコア:のPostgres CASEと範囲、私はこのようになりますテーブル持って

table: move_score_total 
ID | Move_score_total 
1 | 5.7865 
2 .| 11.543 
3 .| 14.29734 

などを.... 私はこれを提供するクエリを実行したいと思います(ドン」列順序について気にする必要はありません)。

table: move_score_total 
ID | scaled_score | Move_score_total 
1 | 200   |5.7865 
2 .| 80   |11.543 
3 .| 20   |14.29734 

私はこのクエリーが近いかもしれないと考えました。私ですか?それとも私は遠く離れて私が手にエラーがあるとして午前:

ERROR: syntax error at or near "numrange" 
LINE 3: ... WHEN move_score_total.move_score_total::numeric numrange[0... 


SELECT move_score_total."ID", 
CASE move_score_total.move_score_total 
    WHEN move_score_total.move_score_total numrange[0,8) THEN 200 
    WHEN move_score_total.move_score_total numrange[8,10) THEN 100 
    WHEN move_score_total.move_score_total numrange[10,12) THEN 80          
    WHEN move_score_total.move_score_total numrange[12,14) THEN 40  
    WHEN move_score_total.move_score_total numrange[14,16) THEN 20 
    WHEN move_score_total.move_score_total numrange[16,18) THEN 10 
    WHEN move_score_total.move_score_total numrange[18,20) THEN 1           
ELSE NULL 
END AS scaled_score 
FROM move_score_total; 

答えて

1

私はこの外にcaseに代わる参加:

select "ID", scaled_score 
from 
    move_score_total 
    left outer join (values 
     (numrange (0,8), 200), 
     (numrange (8,10), 100), 
     (numrange (10,12), 80), 
     (numrange (12,14), 40), 
     (numrange (14,16), 20), 
     (numrange (16,18), 10), 
     (numrange (18,20), 1) 
    ) s (r, scaled_score) on move_score_total <@ r 
+0

はあなたに感謝!私が言ったように、私はこれについていくつか新しくなっていますので、ドキュメンテーションを指摘したり、最後の行にs、r、および@が何であるかを説明できますか?私は残りを得ると思う:) – edswartz

関連する問題