Мне нужно создать ту же группу на нескольких разных агрегатах, которые я получаю с помощью вложенных подзапросов в 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)
... и т.д.. для каждого из агрегатов, но я не думаю, что это хороший путь. Просто не могу ничего лучше понять.