Postgresql 将列与数组的每个值相乘
如何在不使用循环的情况下将列值与数组中的每个元素相乘 我已经尝试过使用for-each循环来迭代循环,并将每个元素与列值相乘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
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您的意思是要添加一列以显示原始数组?