2015-08-05 6 views
1

Мне нужно преобразовать запрос из Oracle SQL в Postgres.Преобразование rownum из Oracle в Postgres, в разделе «having»

select count(*) from table1 group by column1 having max(rownum) = 4 

Если я заменить "ROWNUM" с "row_number() над()", у меня есть сообщение об ошибке: "оконные функции не разрешены в HAVING". Не могли бы вы помочь мне получить тот же результат в Postgres, что и в Oracle?

+2

Если честно: я не думаю, что этот запрос делает много смысла в Oracle. Что именно это должно делать? –

+0

Я тестировал конкретный стол. Таблица имеет 6 строк, а столбец из предложения group-by имеет значения: 0, 0, 0, 1, 0, 1. Для max (rownum) = 5 возвращает 4, для max (rownum) = 6 возвращает 2, и для другого значения запрос не возвращает строку. –

+0

Можете ли вы обновить свой вопрос, чтобы включить определение таблицы и инструкции вставки, пожалуйста? – Boneist

ответ

1

Следующий запрос будет выполнять то, что делает ваш запрос Oracle.

select count(*) from 
(select column1, row_number() over() as x from table1) as t 
group by column1 having max(t.x) = 6; 

Однако

Ни оракул не Postgres будет гарантировать порядок, в котором записи считываются, если не указано заказ по п. Поэтому выполнение запроса несколько раз будет несовместимым в зависимости от того, как база данных решает обработать запрос. Конечно, в postgres любые обновления изменят порядок строк.

В приведенном ниже примере у меня есть дополнительная колонка seq, которая используется для обеспечения согласованного сортировки.

CREATE TABLE table1 (column1 int, seq int); 
insert into table1 values (0,1),(0,2),(0,3),(1,4),(0,5),(1,6); 

И пересмотренный запрос, который заставляет порядок, чтобы быть последовательным:

select count(*) from 
(select column1, row_number() over (order by seq) as x from table1) as t 
group by column1 having max(t.x) = 6; 
+0

С первым запросом смещения 4 и 5 в порядке, но смещения от 0 до 3 не в порядке (у них есть значение 2 или 4, а в Oracle нет результатов для max (rownum) от 1 до 4) –

+0

У меня есть обновленный запрос, – Gary

+0

Он работает. Благодаря! Теперь я адаптирую это для большего запроса. –

 Смежные вопросы

  • Нет связанных вопросов^_^