【问题标题】:Netezza SQL For LoopNetezza SQL For 循环
【发布时间】:2015-04-06 21:13:38
【问题描述】:

我有以下查询,我将其称为 query1:

with a as (
select customer_key as cust,
sum(sales)*1.0/4 as avg_sales
sum(returns)*1.0/4 as avg_return
count(distinct order_key)*1.04 as avg_num_orders
from orders_table
where purch_year between 2011 and 2014
group by cust
order by random()
),

b as (
select *
from a
where avg_num_orders > .25
limit 100000
)

select case 
       when avg_num_orders <= 1 then 'Low'
       when avg_num_orders between 1 and 4 then 'Medium'
       when avg_num_orders > 4 then 'High'
   end as estimated_frequency,
   count(cust) as num_purchasers_year,
   sum(avg_num_orders) as num_orders_year,
   avg(avg_num_orders) as avg_num_order_year,
   sum(avg_sales) as avg_sales_year,
   sum(avg_total_return) as avg_return_year,
   avg_sales_year/num_orders_year as AOV,
   avg_sales_year/num_purchasers_year as ACS,
   stddev(avg_sales) as sales_stddev
from b
where avg_num_orders > .25
group by estimated_frequency
order by  estimated_frequency;

我想编写执行以下操作的代码(这是行不通的,我提供了伪代码)。我没有创建过程的权限。

Create table temp1
for i in 1..100 loop
insert into temp1 the result of QUERY1
end loop

然后

select estimated_frequency,
       avg(acs),
       avg(sales_stddev)
from temp1
group by estimated_frequency 

基本上,我想运行 query1 100 次,并将结果存储在一个名为 temp1 的表中,然后在我说完所有内容后计算 temp1 上的一些平均值。

感谢您的帮助

【问题讨论】:

    标签: sql loops for-loop netezza


    【解决方案1】:

    我会将此添加为评论,但没有足够的代表。

    我能看到的唯一选择是在 Netezza 之外执行此操作,并将循环写入批处理文件/shell 脚本/Python 脚本/...

    我尝试了以下方法,但请注意这不起作用,因为随机数只生成一次然后重复使用,因此您会得到 100 个相同的样本。

    -- Test view which gives some random data from an existing table.
    create view my_view as 
        select 
            m.*
        from my_table t
        join (
            select (floor(random()*10)+1)::integer rand_id -- assuming I have ids from 1 to 10
        ) x on x.rand_id = t.id;
    
    create table results (id integer, data double precision);
    
    insert into results
        select v.*
        from my_view v
        cross join table(generate_series(1,100));
    

    Generate_series 是一个用户定义的表函数,您可以从the Enzee Community website 获取。

    【讨论】:

      猜你喜欢
      • 2014-03-19
      • 1970-01-01
      • 2017-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多