несколько отдельных родительских выборок для сохраненного внутреннего запроса

#postgresql

#postgresql

Вопрос:

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

 select 
  count(*)...
  field_a
from (
   select ...complex query
)
group by field_a

select 
  count(*)...
  field_b
from (
   select ...complex query
)
group by field_b
  

Я бы предпочел вызвать внутренний запрос один раз:

 select 
  count(*)...
  field_a
from stored results = (
   select ...complex query
)
group by field_a

select 
  count(*)...
  field_b
from stored results = (
   select ...complex query
)
group by field_b
  

Как я могу этого добиться?

Комментарии:

1. Выберите «сложный запрос» в #t, затем во втором блоке выберите * из #t в конце (когда закончите с #t)… удаление таблицы #t

Ответ №1:

Мой опыт работы с SQL Server, но для такого рода вещей я бы использовал либо табличную переменную (не похоже, что postgresql поддерживает их), либо временную таблицу.

Посмотрите на эту ссылку, чтобы узнать, как это сделать в postgresql.

Как только вы создадите временную таблицу с нужными вам столбцами, вы можете изменить свой complex query для вставки в эту таблицу tmp.

После вставки данных вы можете запрашивать их столько раз, сколько захотите. Имейте в виду, что ваша таблица tmp не является постоянной (следовательно, временной) и будет автоматически удалена после завершения вашего скрипта.