PostgreSQL 實現二維陣列求和
阿新 • • 發佈:2020-07-23
Postgres陣列型別int4[],經常儲存24小時資料的時候會用 int4[24]
當需要聚合統計,對每個小時資料求和時就有點麻煩
可以使用下述函式實現求和
CREATE OR REPLACE FUNCTION "public"."final_24hours_group_sum"(IN "v_hours_arr" _int4, OUT "o_result" _int4) RETURNS "pg_catalog"."_int4" AS $BODY$ /* * 多個24小時int[],對每小時資料sum * @Author Jamin * @Example * SELECT * FROM public.final_24hours_group_sum(array[[1,2],[10,20]]) */ declare tmp int[]; v_result int[] := array[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; BEGIN FOREACH tmp SLICE 1 IN ARRAY v_hours_arr LOOP v_result[1]:=v_result[1]+COALESCE(tmp[1],0); v_result[2]:=v_result[2]+COALESCE(tmp[2],0); v_result[3]:=v_result[3]+COALESCE(tmp[3],0); v_result[4]:=v_result[4]+COALESCE(tmp[4],0); v_result[5]:=v_result[5]+COALESCE(tmp[5],0); v_result[6]:=v_result[6]+COALESCE(tmp[6],0); v_result[7]:=v_result[7]+COALESCE(tmp[7],0); v_result[8]:=v_result[8]+COALESCE(tmp[8],0); v_result[9]:=v_result[9]+COALESCE(tmp[9],0); v_result[10]:=v_result[10]+COALESCE(tmp[10],0); v_result[11]:=v_result[11]+COALESCE(tmp[11],0); v_result[12]:=v_result[12]+COALESCE(tmp[12],0); v_result[13]:=v_result[13]+COALESCE(tmp[13],0); v_result[14]:=v_result[14]+COALESCE(tmp[14],0); v_result[15]:=v_result[15]+COALESCE(tmp[15],0); v_result[16]:=v_result[16]+COALESCE(tmp[16],0); v_result[17]:=v_result[17]+COALESCE(tmp[17],0); v_result[18]:=v_result[18]+COALESCE(tmp[18],0); v_result[19]:=v_result[19]+COALESCE(tmp[19],0); v_result[20]:=v_result[20]+COALESCE(tmp[20],0); v_result[21]:=v_result[21]+COALESCE(tmp[21],0); v_result[22]:=v_result[22]+COALESCE(tmp[22],0); v_result[23]:=v_result[23]+COALESCE(tmp[23],0); v_result[24]:=v_result[24]+COALESCE(tmp[24],0); END LOOP; o_result:=v_result; RETURN; END$BODY$ LANGUAGE plpgsql IMMUTABLE COST 100;