首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用FOREACH对数组中的值进行多次查询

如何使用FOREACH对数组中的值进行多次查询
EN

Stack Overflow用户
提问于 2019-04-29 16:45:16
回答 1查看 155关注 0票数 0

我想运行一个查询,并通过在postgresql中使用FOREACH循环遍历数组来获得行。

我尝试按照文档中的说明使用FOREACH循环,但它返回错误"cannot use RETURN QUERY in a non-SETOF function“

代码语言:javascript
复制
 DO
  $do$
  DECLARE
  a integer[] := array[1,2,3];
  i integer;   
 begin
  foreach i IN ARRAY a
 LOOP 
RETURN QUERY
select
models.sku,
(sum(models.unitretailprice) * sum(coefficients.unit_retail_price))  +
(sum(models.flag::int) *   sum(coefficients.flag::int)) +
(sum(models.mc_baseline) *    sum(coefficients.mc_baseline)) +
(sum(models.mc_day_avg) * sum(coefficients.mc_day_avg)) +
(sum(models.mc_day_normal) * sum(coefficients.mc_day_normal)) +
(sum(models.mc_week_avg) *    sum(coefficients.mc_week_avg))  +
(sum(models.mc_week_normal) * sum(coefficients.mc_week_normal)) +
(sum(models.sku_day_avg) *    sum(coefficients.sku_day_avg)) +
(sum(models.sku_month_avg) *  sum(coefficients.sku_month_avg)) +
(sum(models.sku_month_normal)* sum(coefficients.sku_month_normal)) +
(sum(models.sku_moving_avg) * sum(coefficients.sku_moving_avg)) +
(sum(models.sku_week_avg) *   sum(coefficients.sku_week_avg)) +
(sum(models.sku_week_normal)* sum(coefficients.sku_week_normal)) as baseline,
(i *   sum(coefficients.f)) +
(5 *   sum(coefficients.p)) +
(0 *   sum(coefficients.a)) as promoIncremental,
(sum(models.basket_dollar_off) *   sum(coefficients.basket_dollar_off)) +
(sum(models.basket_per_off) *   sum(coefficients.basket_per_off)) +
(sum(models.category_dollar_off) *   sum(coefficients.category_dollar_off)) +
(sum(models.category_per_off) *   sum(coefficients.category_per_off)) +
(sum(models.disc_per) * sum(coefficients.disc_per)) as couponIncremnetal
from 
models  join coefficients
on
models.sku = coefficients.sku
and
models.si_type = coefficients.si_type
and
models.model_type = coefficients.model_type
where
coefficients.sku in ('12841276', '11873916') and coefficients.shop_descr = 'Papercrafting Technology'
group by models.sku ;
END LOOP;

结束$do$

EN

回答 1

Stack Overflow用户

发布于 2019-04-29 17:28:57

您可以将具有因子的CTE交叉联接到由当前表组成的派生表。

代码语言:javascript
复制
WITH a (i)
AS
(
VALUES (1),
       (2),
       (3)
)
SELECT ...
       a.i * x.sum_f + 5 * x.sum_p promoincremental,
       ...
       FROM a
            CROSS JOIN (SELECT ...
                               sum(coefficients.f) sum_f,
                               sum(coefficients.p) sum_p,
                               ...
                               FROM ...) x;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55899781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档