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

Postgresql 将列与数组的每个值相乘,postgresql,Postgresql,如何在不使用循环的情况下将列值与数组中的每个元素相乘 我已经尝试过使用for-each循环来迭代循环,并将每个元素与列值相乘 CREATE OR REPLACE FUNCTION public.test_p_offer_type_simulation1(offers numeric[]) RETURNS TABLE(sku character varying, cannibalisationrevenue double precision, cannibalisationmargin dou

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

我已经尝试过使用for-each循环来迭代循环,并将每个元素与列值相乘

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*2,3*3,3*4乘以基线=3。与值6、9、12相乘后返回3行

输出应为:

  id | result| number
 ----+-------+---------
  1      6       2
  1      9       3
  1     12       4

好的,根据您的描述,只需使用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表\u tmp替换为您的实际表名。

请给出一个清晰的原始数据和输出示例data@Shawn.X我已经用一个示例更新了这个问题,其中tmp_表作为选择1作为id,1作为基线,“{2,3,4}”::int[]作为arr,来自表_name,其中id=1选择id,基线,基线*unnestmp_table.arr作为tmp_table的结果;没有人,我只是用一个有效的语句重写了这个查询,因为在您的查询的CTE中,您忘记了提到from子句。顺便说一句,谢谢你,伙计@不客气。上面的SQL只是一个简单的例子,您可以改进它以满足您的需要。如果你方便的话,请接受我的回答。谢谢Dyeah,我确实接受了,我想知道如何得到它与之相乘的元素。例如,在[2,3,4]中,我还想打印2,3,4,即基线乘以的数字with@RohanKumar您的意思是要添加一列以显示原始数组?