I have the following query: select seta.store_id, avg(seta.sales) avg_seta, avg(setb.sales) avg_setb
from (select store_id, avg(sales) sales from store where group_id in(10,11,12) group by store_id ) seta, (select store_id, avg(sales) sales from store where group_id in(13,14,15) group by store_id ) setb where seta.store_id = setb.store_id; I want to have this query in a function, so that I can pass in arrays for the group IDs. I tried the following, but it's much too slow. I would query the following via: select * from store_avg('{10,11,12}','{13,14,15}'); create or replace function store_avg () returns setof store_avg_type as $$ select seta.store_id, avg(seta.sales) avg_seta, avg(setb.sales) avg_setb from (select store_id, avg(sales) sales from store where group_id in(select $1[i] from generate_subscripts($1, 1) g(i)) group by store_id ) seta, (select store_id, avg(sales) sales from store where group_id in(select $1[i] from generate_subscripts($1, 1) g(i)) group by store_id ) setb where seta.store_id = setb.store_id; $$ language 'sql'; The above are of course fake queries, but in my much more complex case, is 10 seconds when I have the group_ids hard code, and takes 55 seconds when using the gneerate_subscripts. My assumption, is that optimizer doesn't work well with generate_subscripts. What is the best way to do this? Should I do this as plpgsql function, and somehow define the set of ints at the beginning of the function? How would i do this? Thanks so much! I appreciate your help. Anish