将一列与数组的每个值相乘

时间:2019-06-12 09:21:29

标签: postgresql

如何在不使用循环的情况下将列值与数组中存在的每个元素相乘?

我尝试过在循环中使用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

1 个答案:

答案 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替换为您的真实表名即可。