如何在不使用循环的情况下将列值与数组中存在的每个元素相乘?
我尝试过在循环中使用for循环,并将每个元素与列值相乘。
CREATE OR REPLACE FUNCTION
public.test_p_offer_type_simulation1(offers numeric[])
RETURNS TABLE(sku character varying, cannibalisationrevenue double
precision, cannibalisationmargin double precision)
LANGUAGE plpgsql
AS $function$ declare a numeric []:= offers;
i numeric;
begin
foreach i in array a loop return QUERY
select
base.sku,
i * base.similar_sku,
.................
假设我有一个列名'baseline',并且有一个数组[1,2,3],我想将基线ID为= 1的基线列值与该数组的每个元素相乘。
示例:::
id | baseline
----+----------
1 | 3
假设我有一个值[2,3,4]的数组;我想将基线= 3与(3 * 2),(3 * 3),(3 * 4)相乘。并在与值6、9、12相乘后返回3行。
输出应为:
id | result| number
----+-------+---------
1 6 2
1 9 3
1 12 4
答案 0 :(得分:2)
好的,根据您的描述,只需使用unnest
函数,示例SQL如下:
with tmp_table as (
select 1 as id, 3 as baseline, '{2,3,4}'::int[] as arr
)
select id,baseline*unnest(arr) as result,unnest(arr) as number from tmp_table;
id | result | number
----+--------+--------
1 | 6 | 2
1 | 9 | 3
1 | 12 | 4
(3 rows)
您只需将上面的CTE table_tmp
替换为您的真实表名即可。