0

私はPostgresqlの初心者ですが、次のように計算できるかどうか知りたいです。

select T.result + 
    -- here I want to do the following:
    -- iterate through T.arr1 and T.arr2 items and add their values
    -- to the T.result using the rules:
    -- if arr1 item is 1 then add 10, if arr1 item is 2 or 3 then add 20,
    -- if arr2 item is 3 then add 15, if arr2 item is 4 then add 20, else add 30

from (
    select 5 as result, array[1,2,3] as arr1, array[3,4,5] as arr2
) as T

したがって、これらの配列の場合、クエリは5 + 10 + 20 + 20 + 15 + 20 + 30=120を生成します。

助けてくれてありがとう。

4

1 に答える 1

3

次のようなものを試してください:

SELECT SUM(CASE val 
           WHEN 1 THEN 10
           WHEN 2 THEN 20
           WHEN 3 THEN 20
           END)
FROM unnest(array[1,2,3]) as val

配列の合計を取得します。

完全なクエリは次のようになります。

select T.result + 
       (SELECT SUM(CASE val 
               WHEN 1 THEN 10
               WHEN 2 THEN 20
               WHEN 3 THEN 20
               END)
        FROM  unnest(arr1) as val) +
       (SELECT SUM(CASE val 
               WHEN 3 THEN 15
               WHEN 4 THEN 20
               ELSE 30
               END)
        FROM  unnest(arr2) as val)   
from (
    select 5 as result, array[1,2,3] as arr1, array[3,4,5] as arr2
) as T

SQLフィドル

于 2013-03-06T14:53:26.340 に答える