powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Второе место
25 сообщений из 30, страница 1 из 2
Второе место
    #40021932
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

Ломаю голову как корректно написать запрос выдающий второе место из сортированного списка для Оракла 11g.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with fifa2018raw(placed,country) as (
  select 3, 'Belgium' from dual union all
  select 1, 'France' from dual union all
  select 2, 'Russia' from dual union all
  select 4, 'England' from dual
),
fifa2018sorted(country) as (
  select country from fifa2018raw order by paced
)



fifa2018sorted выдает список победителей по порядку (1 место, второе, и т.д.), но без ключа сортировки. Доступ к сырым данным считается административно заблокирован.

Показать первое место, легко:
select * from fifa2018sorted where rownum=1

Показать второе место, сложнее:

(select * from fifa2018sorted where rownum<=2)
minus
(select * from fifa2018sorted where rownum=1)

Показать первые три места, в правильном порядке - ещё больше мороки, приходится воссоздавать ключ:

Код: plsql
1.
2.
3.
4.
5.
select country from 
  (select rownum as ord, country 
     from fifa2018sorted
    where rownum <= 3)
 order by ord



Есть ли проще методы для работы с сортированными представлениями, и разрешены ли такие представления в каком-нибудь из стандартов SQL?
...
Рейтинг: 0 / 0
Второе место
    #40021951
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with fifa as (
  select date '2018-02-01' ord, 'Belgium' country from dual union all
  select date '2019-03-01', 'France' from dual union all
  select date '2021-06-01', 'Russia' from dual union all
  select date '2017-01-01', 'England' from dual
)
select country from (
  select country, row_number() over (order by ord desc) rn
    from fifa
) where rn = 3;



методы для работы с сортированными представлениями

Услышите вы, как обычно, раза с двадцатого. Ну да вода камень точит.

Не нужна вам сортировка в представлениях.
...
Рейтинг: 0 / 0
Второе место
    #40021967
Vlad074
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изврат конечно:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with fifa2018raw(placed,country) as (
  select 3, 'Belgium' from dual union all
  select 1, 'France' from dual union all
  select 2, 'Russia' from dual union all
  select 4, 'England' from dual
)
select
  DISTINCT
  NTH_VALUE(country, 2) OVER (order by placed RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS second_place
 from fifa2018raw F
...
Рейтинг: 0 / 0
Второе место
    #40021990
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Доступ к сырым данным считается административно заблокирован.

Если ключ сортировки недоступен, но по постановке требуется его наличие, то идите к административному ресурсу и требуйте изменения контракта доступного вам представления.

Во всём остальном задача не имеет смысла.
...
Рейтинг: 0 / 0
Второе место
    #40022139
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmdmdm


Не нужна вам сортировка в представлениях.


Не нужна, и я этим не пользуюсь. Сортированные представления плохо задокументированы и не стандартизованы.

Это не означает что у меня нет вопросов о любопытных особенностях Оракла. Мне нравится изучать плохо задокументированые аспекты систем которые выпирают из общей модели.
...
Рейтинг: 0 / 0
Второе место
    #40022143
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env

Во всём остальном задача не имеет смысла.


Это эквивалент "распечатайте третью строчку файла".
Если таблица - внешняя.

Вас не тревожит что у тюринг-полного языка SQL которым вы владеете нет простого способа решить задачу уровня первого курса?
...
Рейтинг: 0 / 0
Второе место
    #40022152
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Это эквивалент "распечатайте третью строчку файла"

Это показатель непонимания концепций. Осильте уже их.

Нет, это не эквивалент. У кучи нет третьей строчки.
...
Рейтинг: 0 / 0
Второе место
    #40022153
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
нет простого способа решить задачу уровня первого курса

Добавьте себе в эту задачу:

При этом файл читается с N разных мест и строки выдаются в произвольном порядке поступления от источников. Иногда, порядок будет совпадать. На вход повлиять нельзя. Вот вам распечатка файла с одного из источников - проверять будем по ней.

А теперь решайте.
...
Рейтинг: 0 / 0
Второе место
    #40022154
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НеофитSQL
Вас не тревожит что у тюринг-полного языка SQL которым вы владеете нет простого способа решить задачу уровня первого курса?

Опять смешались в кучу кони, люди и залпы тысячи орудий ...
...
Рейтинг: 0 / 0
Второе место
    #40022171
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
у тюринг-полного языка SQL

Ну-ну...
...
Рейтинг: 0 / 0
Второе место
    #40022187
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
env

Во всём остальном задача не имеет смысла.


Это эквивалент "распечатайте третью строчку файла".

строки в файле идут в строго определенном порядке,
в куче нет

напр
выбрать второй камень из горки в 100камней
какой будет вторым?


ps
развлекаетесь под солнышком?
....
stax
...
Рейтинг: 0 / 0
Второе место
    #40022239
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,
то, что ты сказал, его ещё больше запутает.

Конечно, SQL имеет дело с кучами (heaps), но реляционная модель - только с множествами (sets).
Поэтому для некоторых куч и реляционных отношений ответ окажется одинаковым, то есть построенном на теории вероятности над конечными совокупностями множествами.

Но, в то время как существуют кучи, для которых ответ детерминирован в положительном смысле
(например, когда вся куча состоит из одинаковых элементов, то второй выбранный из ... будет точно такой же, как первый, либо его не существует),
то для множеств он всегда детерминирован в отрицательном - можно гарантировать только то, что второй
выбранный из ... элемент будет гарантированно не такой же, как первый (либо его не существует).

ps
выбранный из ... - подразумевается, с извлечением...
...
Рейтинг: 0 / 0
Второе место
    #40022247
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby
то для множеств он всегда детерминирован в отрицательном - можно гарантировать только то, что второй
выбранный из ... элемент будет гарантированно не такой же, как первый (либо его не существует).

На этот предмет есть какая то теорема или определение?
...
Рейтинг: 0 / 0
Второе место
    #40022252
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax

строки в файле идут в строго определенном порядке,
в куче нет

напр
выбрать второй камень из горки в 100камней
какой будет вторым?


ps
развлекаетесь под солнышком?
....
stax


Строки выбираемые из отсортированного множества идут в строгом порядке, поэтому работает.

Код: plsql
1.
select * from fifa2018sorted where rownum=1



Поскольку оракл уважает в этой конструкции внутреннюю сортировку, я заключил что присутствует элемент поддержки упорядоченных множеств.

Т.е. не куча камней, а сшитая тетрадка без нумерации страниц. И в некоторых случаях оракл умеет с ней работать как с тетрадкой, и гарантирует тетрадную поддержку в особых случаях.

П.с сижу в предпраздничном трафике
...
Рейтинг: 0 / 0
Второе место
    #40022253
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
graycode,

есть определение множества.

После выбора с извлечением любого "первого" элемента, теоретически невозможно извлечь из оставшихся никакой - ни второй, ни любой последующий, такой же, каков оказался первый.
И никакой из извлеченных не окажется таким же, как любой предшествующий или любой последующий.

Это можно считать следствием определения, но можно считать и определяющим правилом выбора.
Если оно выполнилось, значит то, из чего производился выбор, может быть признано за множество во всех подходящих для множества контекстах.
...
Рейтинг: 0 / 0
Второе место
    #40022254
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot НеофитSQL#22238576]
Stax

...

Строки выбираемые из отсортированного множества...
...


Это химера вашего сознания, следствие недостатка образования.
...
Рейтинг: 0 / 0
Второе место
    #40022258
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby
есть определение множества.

После выбора с извлечением любого "первого" элемента, теоретически невозможно извлечь из оставшихся никакой - ни второй, ни любой последующий, такой же, каков оказался первый.
И никакой из извлеченных не окажется таким же, как любой предшествующий или любой последующий.

В общем определении такого граничного условия нет, где вы взяли это определение?
...
Рейтинг: 0 / 0
Второе место
    #40022259
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby
НеофитSQL

Строки выбираемые из отсортированного множества...
....

Это химера вашего сознания, следствие недостатка образования.


Внимательно прочитайте код:

Код: plsql
1.
select * from (select * from TBL t order by t.id) where rownum=1



И подумайте почему сортировка работает в подзапросе, хотя по вашим словам не должна.
...
Рейтинг: 0 / 0
Второе место
    #40022261
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НеофитSQL
Поскольку оракл уважает в этой конструкции внутреннюю сортировку

Это ты у Оракла так и спросил - внутреннюю сортировку уважаешь? А то смотри у меня ...))
...
Рейтинг: 0 / 0
Второе место
    #40022262
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
graycode,

вторая часть ответа состоит в том, что эта задача о выборе второго шара
при выборе шаров из урны с извлечением.
Она решается для любого конкретного состава шаров.
Там что-то про условную вероятность и суммирование - не помню.
...
Рейтинг: 0 / 0
Второе место
    #40022265
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НеофитSQL
Внимательно прочитайте код:

Код: plsql
1.
select * from (select * from TBL t order by t.id) where rownum=1



И подумайте почему сортировка работает в подзапросе, хотя по вашим словам не должна.

Этот код работает, потому что когда то это был единственный способ получить набор строк пронумерованный в порядке сортировки и этот способ документирован, но подзапрос и представление это разные вещи и с представлением таких гарантий не дается, т.е. ты пользуешься недокументированным поведением, которое может измениться в зависимости от условий или параметров не сильно коррелирующих на первый взгляд с твоим кодом.
...
Рейтинг: 0 / 0
Второе место
    #40022267
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby
вторая часть ответа состоит в том, что эта задача о выборе второго шара
при выборе шаров из урны с извлечением.
Она решается для любого конкретного состава шаров.
Там что-то про условную вероятность и суммирование - не помню.

Это уже какое то специальное множество с наложенными ограничениями, при этом такая задача решается даже при условии одинаковости шаров, главное чтобы их было конечное количество, тогда вы сможете извлечь из урны все шары.
...
Рейтинг: 0 / 0
Второе место
    #40022269
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я вижу что определение "упорядоченного множества" может быть незнакомо для тех кто узнал о теории множеств только из учебника SQL.

Формальное: https://dic.academic.ru/dic.nsf/ruwiki/1157218

Неформальное: стопка. Стопку можно превратить в кучку (неупорядоченное множество). Все операции для кучек также работают для стопок, т.к. стопка является частным случаем кучки.
Для стопок существуют операции, сохраняющее свойство стопок ("перевернуть"), у которых может не быть аналогов для кучек. А могут быть (слить/merge).
...
Рейтинг: 0 / 0
Второе место
    #40022272
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НеофитSQL,

Про упорядоченное никто не говорил и у тебя нет упорядоченного множества, чего ты никак понять не хочешь.
...
Рейтинг: 0 / 0
Второе место
    #40022273
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
graycode,

Вэлкам бэк.


> подзапрос и представление это разные вещи

Синтаксически, да.

Вы же не хотите сказать, что подзапрос и представление не эквивалентны с точки зрения оракла?


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


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