powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / rownum
19 сообщений из 19, страница 1 из 1
rownum
    #39419071
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уважаемые знатоки,

что-то меня переклинило, видимо от жары в офисе.....

туплю

скажите же плиз

запрос типа :
select d...... колонки колонки
from таблица
where условия and условия
and rownum <=1


сначала же отработает rownum ?

то есть корректно сделать подзапрос с условиями и роунам вынести в запрос , типа :
select колонка in
(select d...... колонки колонки
from таблица
where условия and условия
order by .....)

where rownum <=1
?

да же ?

сори за тупой вопрос
...
Рейтинг: 0 / 0
rownum
    #39419075
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
rownum
    #39419242
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ozornitca,
нет, rownum в последнюю очередь (до order by)

если без сортировки, то подзапрос не нужен

результат в общем случае случаен

.....
stax
...
Рейтинг: 0 / 0
rownum
    #39419255
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..rownum в последнюю очередь (до order by)Шо правда?
То есть аналитика посчитается ДО where rownum?
Код: plsql
1.
2.
3.
select value(t) v, sum(value(t)) over () s
  from table(sys.odcinumberlist(1,2,3,4,5)) t
 where rownum <= 3;

Какой ответ по-твоему не выполняя?
...
Рейтинг: 0 / 0
rownum
    #39419272
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо за конкретный пример !

select value(t) v, sum(value(t)) over() s
from table(sys.odcinumberlist(1, 2, 3, 4, 5)) t
where rownum <= 3
order by value(t) desc;

отобрал первые три записи и потом их отсортировал

то есть мне для корректной работы надо выносить в подзапрос, там сортировать и брать первое значение роунамом <= 1
...
Рейтинг: 0 / 0
rownum
    #39419275
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,
не понял в чем подвох
можете не верить, но я правильно ответил 1.2.3

уточню свой ответ
выполняются все предикаты (условия) во where (connect by/group by/unique)
номеруются строки
отсекаются не нужные (до сортіровкі)

зы
справедливости ради, признаюсь что не совсем понимаю как работает rownum<n
в рекурсивном with

.....
stax
...
Рейтинг: 0 / 0
rownum
    #39419286
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..dbms_photoshop,
не понял в чем подвох
можете не верить, но я правильно ответил 1.2.3Только аналитику ты решил проигнорить.
Поинт был в том, что "после rownum" выполняется группировка, аналитика, having, distinct, скаляры и проч.
stax..уточню свой ответ
выполняются все предикаты (условия) во where (connect by/group by/unique)
номеруются строки
отсекаются не нужные (до сортіровкі)Это не так.
По твоей логике сначала сработвает unique (интересно как), а потом сгенерится rownum.
Например
Код: plaintext
select unique mod(rownum, 2)
stax..справедливости ради, признаюсь что не совсем понимаю как работает rownum<n
в рекурсивном withТак же как и без оного.
Только не нужно путать генерацию rownum для рекурсивного члена и геренацию rownum при выборке из with.

Недавно затрагивал с тобой схожий вопрос 20249759 .
...
Рейтинг: 0 / 0
rownum
    #39419430
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..выполняются все предикаты (условия) во where (connect by/group by/unique)
номеруются строки
отсекаются не нужные (до сортіровкі)Неверно. У любой строки-кандидата в результирующий набор всегда есть текущий rownum, который можно использовать в любой момент в предикатах и не только.
...
Рейтинг: 0 / 0
rownum
    #39419513
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо за интересную информацию в теме, все прочитаю!!
...
Рейтинг: 0 / 0
rownum
    #39420147
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopstax..dbms_photoshop,
не понял в чем подвох
можете не верить, но я правильно ответил 1.2.3Только аналитику ты решил проигнорить.
Поинт был в том, что "после rownum" выполняется группировка, аналитика, having, distinct, скаляры и проч.
stax..уточню свой ответ
выполняются все предикаты (условия) во where (connect by/group by/unique)
номеруются строки
отсекаются не нужные (до сортіровкі)Это не так.
По твоей логике сначала сработвает unique (интересно как), а потом сгенерится rownum.
Например
Код: plaintext
select unique mod(rownum, 2)
stax..справедливости ради, признаюсь что не совсем понимаю как работает rownum<n
в рекурсивном withТак же как и без оного.
Только не нужно путать генерацию rownum для рекурсивного члена и геренацию rownum при выборке из with.

Недавно затрагивал с тобой схожий вопрос 20249759 .

по очереди
connect by я неправ , поспешил и опозорился
1) cтроится дерево
2) сортируется sibling
3) выполняется where без rownum
4) номеруется
5) отсекаются записи согласно условию rownum<


про аналитику не понял, все там нормально работает без подзапросов
пример, первые любые пять с средним
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  1* select ename,sal,avg(sal) over () av from emp where rownum < 6
SQL> /

ENAME             SAL         AV
---------- ---------- ----------
SMITH             800       1575
ALLEN            1600       1575
WARD             1250       1575
JONES            2975       1575
MARTIN           1250       1575



про unique, не точно описал rownum -> group by ->distinct

про with
я не путаю, у меня получілся непонятний результат, не стал разбиратся сделал по другому
в такой конструкции rownum должен срабативать для запроса в union all
(берем не больше двух наследніков)?

Код: plsql
1.
2.
3.
4.
5.
6.
with t (...) as (
 select ... from 
 union all
 select ... from where ... rownum<3
)
select * from t



вернусь к Ozornitca (с чего началось)

Ozornitcaскажите же плиз

запрос типа :
select d...... колонки колонки
from таблица
where условия and условия
and rownum <=1


сначала же отработает rownum ?

нет, сначала тработает условия and условия последним and rownum <=1
сдесь нет сортировки поетому подзапрос не нужен, получинте одну "псевдослучайную" запись

Ozornitcaто есть корректно сделать подзапрос с условиями и роунам вынести в запрос , типа :
select колонка in
(select d...... колонки колонки
from таблица
where условия and условия
==>order by .....)

where rownum <=1
?

да же ?


да, нужен подзапрос, Вы берете первую c учетом order by ....., если сортировка не уникальна то тоже получите "псевдослучайную" запись


......
stax
...
Рейтинг: 0 / 0
rownum
    #39420151
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..про аналитику не понял, все там нормально работает без подзапросовFeel the difference
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
SQL> with t(v) as (select value(t) from table(sys.odcinumberlist(1,2,3,4,5)) t)
  2  select *
  3  from
  4  (select sum(v) over () s from t)
  5  where rownum <= 3
  6  /

         S
----------
        15
        15
        15

SQL> with t(v) as (select value(t) from table(sys.odcinumberlist(1,2,3,4,5)) t)
  2  select *
  3  from
  4  (select sum(v) over () s from t
  5  where rownum <= 3
  6  )
  7  /

         S
----------
         6
         6
         6

Так что rownum в последнюю очередь?

PS. С деревьями у тебя снова каша вышла. Впрочем обсуждалось уже не раз, нет интереса мусолить опять.
...
Рейтинг: 0 / 0
rownum
    #39420158
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..(берем не больше двух наследніков)?

Код: plsql
1.
2.
3.
4.
5.
6.
with t (...) as (
 select ... from 
 union all
 select ... from where ... rownum<3
)
select * from t

Да, такая конструкция вернет не более двух строк для каждого выполнения рекурсивного члена.
Наследники не совсем корректно использовать. Какие-либо связи родитель-потомок могу отсутствовать.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SQL> with rec(lvl) as
  2  (select 1 lvl from dual connect by level <= 4
  3  union all
  4  select rec.lvl + 1 from rec
  5  where lvl <= 3 and rownum < 5-lvl)
  6  select * from rec
  7  /

       LVL
----------
         1
         1
         1
         1
         2
         2
         2
         3
         3
         4

10 rows selected.
...
Рейтинг: 0 / 0
rownum
    #39420165
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopstax..про аналитику не понял, все там нормально работает без подзапросовFeel the difference
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
SQL> with t(v) as (select value(t) from table(sys.odcinumberlist(1,2,3,4,5)) t)
  2  select *
  3  from
  4  (select sum(v) over () s from t)
  5  where rownum <= 3
  6  /

         S
----------
        15
        15
        15

SQL> with t(v) as (select value(t) from table(sys.odcinumberlist(1,2,3,4,5)) t)
  2  select *
  3  from
  4  (select sum(v) over () s from t
  5  where rownum <= 3
  6  )
  7  /

         S
----------
         6
         6
         6

Так что rownum в последнюю очередь?

PS. С деревьями у тебя снова каша вышла. Впрочем обсуждалось уже не раз, нет интереса мусолить опять.
про аналитику
все нормально работает
без подзапроса и с подзапросов результаты разные, я ето и ожидал
в зависимости что надо получить, так и кодируем
главное
1) аналитика работает после отсечения записей
2) start with до отсечения записей


зы
если нет интесеса, я ж Вас не могу заставить, вольному воля
на то и форум, меня ж никто не заставлял отвечать Озорничке
мож другие найдутся
...
Рейтинг: 0 / 0
rownum
    #39420171
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..dbms_photoshopпропущено...
Feel the difference
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
SQL> with t(v) as (select value(t) from table(sys.odcinumberlist(1,2,3,4,5)) t)
  2  select *
  3  from
  4  (select sum(v) over () s from t)
  5  where rownum <= 3
  6  /

         S
----------
        15
        15
        15

SQL> with t(v) as (select value(t) from table(sys.odcinumberlist(1,2,3,4,5)) t)
  2  select *
  3  from
  4  (select sum(v) over () s from t
  5  where rownum <= 3
  6  )
  7  /

         S
----------
         6
         6
         6

Так что rownum в последнюю очередь?

PS. С деревьями у тебя снова каша вышла. Впрочем обсуждалось уже не раз, нет интереса мусолить опять.
про аналитику
все нормально работает
без подзапроса и с подзапросов результаты разные, я ето и ожидал
в зависимости что надо получить, так и кодируем
главное
1) аналитика работает после отсечения записей
2) start with до отсечения записей


зы
если нет интесеса, я ж Вас не могу заставить, вольному воля
на то и форум, меня ж никто не заставлял отвечать Озорничке
мож другие найдутсяСтанислав, я допускаю что определенное понимание у тебя имеется, но изъяснешься ты очень косноязычно.
Я обратил внимание что выражение касательно rownum "в последнюю очередь" некорректно, но ты либо так и не понял своей ошибки либо упорно пытаешься игнорировать.

Можешь почитать при желании в доке "Oracle processes hierarchical queries as follows" если уж цель точно проанализировать where clause.
...
Рейтинг: 0 / 0
rownum
    #39420205
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopСтанислав, я допускаю что определенное понимание у тебя имеется, но изъяснешься ты очень косноязычно.
Я обратил внимание что выражение касательно rownum "в последнюю очередь" некорректно, но ты либо так и не понял своей ошибки либо упорно пытаешься игнорировать.

Можешь почитать при желании в доке "Oracle processes hierarchical queries as follows" если уж цель точно проанализировать where clause.
согласен
мне тяжело обяснятся
"в последнюю очередь" в контексте вопроса озорнички

where условия1 and условия2 and ... and rownum <=1
то-есть, сначала все условия (условия1, условия2, ...) и только потом (в последнюю очередь) rownum <=1

дословно
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
запрос типа :
select d...... колонки колонки 
from таблица
where условия and условия 
and rownum <=1


сначала же отработает rownum ?


нет, rownum отработает последним


.....
stax
...
Рейтинг: 0 / 0
rownum
    #39420215
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а меня всегда удивляло место where в запросе с connect by
Код: plsql
1.
2.
3.
4.
5.
select *
  from tbl
 where ***
 start with ***
connect by ***

почему WHERE выше, а не наоборот? я бы поменял местами
Код: plsql
1.
2.
3.
4.
5.
select *
  from tbl
 start with ***
connect by ***
 where ***
...
Рейтинг: 0 / 0
rownum
    #39420234
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxа меня всегда удивляло место where в запросе с connect by
Код: plsql
1.
2.
3.
4.
5.
select *
  from tbl
 where ***
 start with ***
connect by ***

почему WHERE выше, а не наоборот? я бы поменял местами
Код: plsql
1.
2.
3.
4.
5.
select *
  from tbl
 start with ***
connect by ***
 where ***



я про ето старался выше озвучить
connect by и group by сгоряча под один дах сунул

andreymx, что там у меня "с деревьями у тебя снова каша вышла"
в чем я неправ?

.....
stax
...
Рейтинг: 0 / 0
rownum
    #39420236
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxя бы поменял местамиДа, нет же.
Лучше сделать и там и там.
Если в where соединение, то пусть будет написано до, а если фильтр - то после.
Вот это будет по феншую.
...
Рейтинг: 0 / 0
rownum
    #39420255
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopДа, такая конструкция вернет не более двух строк для каждого выполнения рекурсивного члена.
Наследники не совсем корректно использовать. Какие-либо связи родитель-потомок могу отсутствовать.


спасибо
про отсутствовать, понятно

вопрос снимаю, я неправильно понимал работу with

.....
stax
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / rownum
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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