#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 не является постоянной (следовательно, временной) и будет автоматически удалена после завершения вашего скрипта.