Вложенный агрегат и подзапрос в postgresql / SQL с группировкой - PullRequest
0 голосов
/ 14 сентября 2010

Мне нужно создать ту же группу на нескольких разных агрегатах, которые я получаю с помощью вложенных подзапросов в Postgresql 8.3.

Если я сделаю это:

select f10 as report_id,
       (SELECT AVG(age)
          FROM (select f10 as report_id,  
                       f62 as age 
                  from reports 
                 where f55 in ('1')) 
                   and f62 in ('1', '2', '3', '4', '5'))) foo
      group by report_id) as agg1,
       (SELECT AVG(age)
          FROM (select f10 as report_id, 
                       f62 as age 
                  from reports 
                 where f55 in ('2')) 
                   and f62 in ('1', '2', '3', '4', '5'))) foo
      group by report_id) as agg2,
    from reports
group by report_id;

это почти то, что я хочу, но группировка по ничего не делает - все агрегаты одинаковы, это агрегат по всем идентификаторам отчета. Я хочу отдельный агрегат для каждого report_id.

Если я попытаюсь выполнить группировку внутри агрегатов, я не смогу вернуть более 2 полей или строк, и это не сработает.

Мне было предложено сделать

sum(case  
      when f55 in ('1') then f62 
      else 0 
    end) / sum(case 
                 when f55 in ('1') then 1 
                 else 0 
               end) 

... и т.д.. для каждого из агрегатов, но я не думаю, что это хороший путь. Просто не могу ничего лучше понять.

1 Ответ

1 голос
/ 16 октября 2010

Возможно, вы захотите посмотреть на оконные функции:

http://wiki.postgresql.org/wiki/What's_new_in_PostgreSQL_9.0#New_frame_options_for_window_functions

...