2015-04-06 235 views
2

我有以下查询,我将打电话QUERY1:Netezza公司SQL For循环

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中有一些平均数,一旦我感到一切都成定局。

谢谢您的帮助

回答

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得到。