powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Миграция запроса с oracle в pg
9 сообщений из 9, страница 1 из 1
Миграция запроса с oracle в pg
    #39396338
Galina_Bob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем добрый день.
Помогите, пожалуйста, переписать запрос(c ora на pg(9.3 версия)):
select case grouping_id(x.id1, x.id2, x.id3)
when 0 then x.id1 || x.id2 || x.id3
when 1 then x.id1 || x.id2
when 3 then x.id1
else '$'
end
from x
group by rollup(x.id1, x.id2, x.id3)
...
Рейтинг: 0 / 0
Миграция запроса с oracle в pg
    #39396344
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Galina_Bob,

9.6 поставьте, там добавлена поддержка `ROLLUP` / `CUBE` конструкций.
...
Рейтинг: 0 / 0
Миграция запроса с oracle в pg
    #39396348
Galina_Bob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorov,

да, я знаю, что там поддерживается эта конструкция, но пока нет возможности поднять версию.
...
Рейтинг: 0 / 0
Миграция запроса с oracle в pg
    #39396403
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Galina_Bob,

Ну надо написать серию подзапросов (через WITH), которые:
сначала будут группировать по x.id1, x.id2, x.id3

затем по x.id1, x.id2

потом по x.id1

ну и совсем без группировок, а-ля Totals.

Затем сложить их все через UNION ALL, добавив нужную сортировку.
Что-то типа этого: http://stackoverflow.com/q/13990821/1154462
...
Рейтинг: 0 / 0
Миграция запроса с oracle в pg
    #39396411
Galina_Bob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorov,

Спасибо, это то я сделала, но вот что делать с grouping_id не знаю. и пока не получилось именно раздел select переписать
...
Рейтинг: 0 / 0
Миграция запроса с oracle в pg
    #39396429
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Galina_Bob,

Почитайте про функцию GROUPING() , полагаю, что она есть эквивалент для `grouping_id`.

Исходя из описания, получается:
для группировки по x.id1, x.id2, x.id3 -- GROUPING() всегда будет 0 (000)

для группировки по x.id1, x.id2 -- GROUPING() всегда будет 1 (001)

группировка по x.id1 -- GROUPING() всегда будет 3 (011)

для Total -- GROUPING() всегда будет 7 (111)

Соответственно, можно исключить вызов этой функции и просто добавить выржения "как есть" в подзапосы.
...
Рейтинг: 0 / 0
Миграция запроса с oracle в pg
    #39396438
Galina_Bob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorov,

Ясно, спасибо огромное.
...
Рейтинг: 0 / 0
Миграция запроса с oracle в pg
    #39397897
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Galina_Bobvyegorov,

Спасибо, это то я сделала, но вот что делать с grouping_id не знаю. и пока не получилось именно раздел select переписать


надо расписать через union all
все подитоги, (вроде у вас один, не сложно)
grouping не прокатит.
...
Рейтинг: 0 / 0
Миграция запроса с oracle в pg
    #39397961
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorovЗатем сложить их все через UNION ALLМожно зайти с другого конца - сначала разложить, потом группировать по полученному значению.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Миграция запроса с oracle в pg
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]