Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Алгоритм сортировки и вывод числовых значений второго поля, не указанного в ORDER By  [new]
pudoff
Member

Откуда:
Сообщений: 5
Добрый день !

Не нашел разора алгоритма в описании синтаксиса ORDER BY, решил спросить у опытных sqlщиков.

По какому принципу происходит сортировка второго числового столбца,
в случае если он не указан в конструкции ORDER BY,
при условии одного и того же значения столбца по которому происходит сортировка.

Чтоб понять вопрос, возьмем стандартный тестовый пример :

CREATE TABLE my_table
(my_data NUMBER,
id NUMBER)

Заполним таблицу значениями:

INSERT INTO my_table
VALUES(1,1);
INSERT INTO my_table
VALUES(2,2);
INSERT INTO my_table
VALUES(3,1);
INSERT INTO my_table
VALUES(4,2);
INSERT INTO my_table
VALUES(5,1);

Сделаем запрос и отсортируем по полю id:

SELECT *
FROM tmp$my_table a
order by id

Получаем:

My_data ID
1 1
3 1
5 1
4 2
2 2

Почему сначала выводится строка с My_data = 4 и ID = 2, а не My_data = 2 и ID = 2 ?
При этом значения My_data у которых значение столбца ID =1 сортируются нормально по возрастанию.
По какому принципу выводятся значения столбца My_data , который не находится в конструкции order by ?

Сообщение было отредактировано: 5 ноя 19, 12:54
5 ноя 19, 12:52    [22009879]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм сортировки и вывод числовых значений второго поля, не указанного в ORDER By  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 52744
pudoff
По какому принципу происходит сортировка второго числового столбца,
в случае если он не указан в конструкции ORDER BY,
ни по какому
сортировка только по тем выражениям, которые в ордер бай

pudoff
По какому принципу выводятся значения столбца My_data , который не
выводятся строки, они сортируются

Сообщение было отредактировано: 5 ноя 19, 13:07
5 ноя 19, 13:06    [22009889]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм сортировки и вывод числовых значений второго поля, не указанного в ORDER By  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29402
pudoff
По какому принципу выводятся значения столбца My_data , который не находится в конструкции order by ?
Ни по какому.
Хочешь предсказуемый результат - указывай детерминированный order by.
5 ноя 19, 13:12    [22009896]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм сортировки и вывод числовых значений второго поля, не указанного в ORDER By  [new]
pudoff
Member

Откуда:
Сообщений: 5
Elic
pudoff
По какому принципу выводятся значения столбца My_data , который не находится в конструкции order by ?
Ни по какому.
Хочешь предсказуемый результат - указывай детерминированный order by.


Хорошо, сформулирую сразу в лоб вопрос.
Он ведь в связи с чем возник: есть примеры к сертификационному оракловому экзамену.
Там дана эта таблица и следующий запрос


select analytics
from (
select rownum as my_row, lag(my_data) over ( partition by id order by id) analytics
FROM my_table a)
where my_row = 2

Запрос возвращает 4.
Т.е. он выбирает значение my_data предыдущей записи в партии ID, и сортирует по ID,
если для записей с ID = 1 все понятно они идут вначале по порядку,
то следующая запись с ID 2 идет та, у которой My_data = 4 (rownum = 4),
соответвенно т.к. она первая в партии, то предыдущего значение нет, поэтому lag выводит null, а в следующей записи с My_data = 2, lag возвращает 4.

Хорошо, выполнив запрос я понял результат. Но вот если я сижу на экзамене я не могу нигде выполнить запрос, соответственно мне надо понимать как именно это работает чтобы правильно ответить на вопрос.

А пока кроме как запомнить варианта нет. И не факт что в реальном экзамене такой вопрос будет.

Сообщение было отредактировано: 5 ноя 19, 15:02
5 ноя 19, 15:01    [22009992]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм сортировки и вывод числовых значений второго поля, не указанного в ORDER By  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29402
pudoff
select analytics
from (
select rownum as my_row, lag(my_data) over ( partition by id order by id) analytics
FROM my_table a)
where my_row = 2

Запрос возвращает 4.
Правильный ответ - результат непредсказуем. В квадрате.
5 ноя 19, 15:14    [22009996]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм сортировки и вывод числовых значений второго поля, не указанного в ORDER By  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2012
pudoff

Запрос возвращает 4.

почему 4?
SQL> ed
Wrote file afiedt.buf

  1  with my_table(My_data,ID) as (
  2  select 1,  1 from dual union all
  3  select 3,  1 from dual union all
  4  select 5,  1 from dual union all
  5  select 4,  2 from dual union all
  6  select 2,  2 from dual)
  7  --select * from my_table
  8  select analytics
  9  from (
 10  select rownum as my_row, lag(my_data) over ( partition by id order by id) analytics
 11  FROM my_table a)
 12* where my_row = 2
SQL> /

 ANALYTICS
----------
         1

SQL>


.....
stax
5 ноя 19, 15:14    [22009997]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм сортировки и вывод числовых значений второго поля, не указанного в ORDER By  [new]
-2-
Member

Откуда:
Сообщений: 14994
pudoff

select analytics
from (
select rownum as my_row, lag(my_data) over ( partition by id order by id) analytics
FROM my_table a)
where my_row = 2

Запрос возвращает 4.
Запрос может вернуть любое из значений и еще null. Но, возможно, кто-то перепутал местами значения id и my_data - было бы логично, что id уникален. Тогда результат null.
5 ноя 19, 15:19    [22010005]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм сортировки и вывод числовых значений второго поля, не указанного в ORDER By  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17717
pudoff
Elic

Хочешь предсказуемый результат - указывай детерминированный order by.

если для записей с ID = 1 все понятно они идут вначале по порядку,

Не по порядку.
В частном случае с табличкой из одного блока Вы можете наблюдать спецэффекты вроде предполагаемой Вами "упорядоченности" хранения данных в heap-organized таблице.
Но как "опытный sqlщик" должны понимать, что результат запроса недетерминирован и Вы можете получить в ответ что угодно, тем более с завязкой на rownum.
Для разнообразия поменяйте порядок вставки записей в таблицу и порадуйтесь результату.
5 ноя 19, 15:20    [22010007]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм сортировки и вывод числовых значений второго поля, не указанного в ORDER By  [new]
pudoff
Member

Откуда:
Сообщений: 5
-2-
pudoff

select analytics
from (
select rownum as my_row, lag(my_data) over ( partition by id order by id) analytics
FROM my_table a)
where my_row = 2

Запрос возвращает 4.
Запрос может вернуть любое из значений и еще null. Но, возможно, кто-то перепутал местами значения id и my_data - было бы логично, что id уникален. Тогда результат null.


как раз смысл запроса чтобы разбить на партии с одинаковым значением "partition by id " и он именно возвращает 4, сколько бы я ра его не выполнял и почему-то в примере вопроса к оракловому экзамену это есть, и запрос действительно возвращает 4
5 ноя 19, 15:23    [22010010]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм сортировки и вывод числовых значений второго поля, не указанного в ORDER By  [new]
-2-
Member

Откуда:
Сообщений: 14994
pudoff
как раз смысл запроса чтобы разбить на партии с одинаковым значением "partition by id "
А если id будет уникальным, то "партии" получатся с неодинаковым значением??
5 ноя 19, 15:25    [22010013]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм сортировки и вывод числовых значений второго поля, не указанного в ORDER By  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29402
pudoff
как раз смысл запроса
Ты заблуждаешься.
5 ноя 19, 15:26    [22010014]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм сортировки и вывод числовых значений второго поля, не указанного в ORDER By  [new]
pudoff
Member

Откуда:
Сообщений: 5
andrey_anonymous
pudoff
пропущено...

если для записей с ID = 1 все понятно они идут вначале по порядку,

Не по порядку.
В частном случае с табличкой из одного блока Вы можете наблюдать спецэффекты вроде предполагаемой Вами "упорядоченности" хранения данных в heap-organized таблице.
Но как "опытный sqlщик" должны понимать, что результат запроса недетерминирован и Вы можете получить в ответ что угодно, тем более с завязкой на rownum.
Для разнообразия поменяйте порядок вставки записей в таблицу и порадуйтесь результату.


Этож вопрос из примера сертификационного экзамена в вопросе дана последовательность инсерта записей.
Я просто пытаюсь понять какой логики придерживаться если будет похожий вопрос, но с другими значениями либо другой последовательностью
5 ноя 19, 15:26    [22010016]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм сортировки и вывод числовых значений второго поля, не указанного в ORDER By  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29402
pudoff
Этож вопрос из примера сертификационного экзамена
Где ты его украл?
5 ноя 19, 15:27    [22010019]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм сортировки и вывод числовых значений второго поля, не указанного в ORDER By  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17717
pudoff
какой логики придерживаться если будет похожий вопрос, но с другими значениями либо другой последовательностью

Вам уже объяснили. Случайной, ибо недетерминирован.
А что касается экзамена - то есть два соображения:
- вопросы сертификационных экзаменов не публичны. Максимум, что Вы можете найти в тырнетах - т.н. "брейндампы", которые не тождественны экзаменационным вопросам.
- часть вопросов экзамена содержат различные подковырки, которые надо уметь видеть и понимать.

Сообщение было отредактировано: 5 ноя 19, 15:33
5 ноя 19, 15:31    [22010025]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм сортировки и вывод числовых значений второго поля, не указанного в ORDER By  [new]
pudoff
Member

Откуда:
Сообщений: 5
Elic
pudoff
Этож вопрос из примера сертификационного экзамена
Где ты его украл?


Приложение на андроид нашел с примерами сертификационного экзамена 1Z0-071
5 ноя 19, 15:31    [22010026]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм сортировки и вывод числовых значений второго поля, не указанного в ORDER By  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29402
pudoff
Приложение на андроид нашел с примерами сертификационного экзамена 1Z0-071
Не надо полагаться на недостоверные источники.
5 ноя 19, 15:32    [22010027]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить