Причина в том, что PG на каждом уровне вложенности делает временную таблицу. А это получается не быстро. По крайней мере по сравнению с реализацией агрегата на С.
Кроме того, двухуровневые запросы с четко поделенными функциями на мой взгляд понятнее. Ведь суммарно отчетов очень много - несколько десятков, они периодически улучшаются(путем добавления показателей), и числота тоже имеет значение. У нас 3 кастомные функции, котрые легки в понимании, а дальше все стандартно, и всего в 2 уровня.
> Причина в том, что PG на каждом уровне вложенности делает временную таблицу.
Это в общем (т.е. почти всегда) просто не так, извините. Вы это в планах видели или так, запомнили то, что кто-то ляпнул? ;)
> Кроме того, двухуровневые запросы с четко поделенными функциями на мой взгляд понятнее.
Ну так вот на конкретных примерах лучше бы смотреть... я как-то чаще видел наоборот.