Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите составить Oracle SQL запрос 
:(
    Опции темы
blobDead
Дата 25.11.2015, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 25.11.2015

Репутация: нет
Всего: нет



Привет, ребят, не поможете составить следующий sql-запрос?
Вывести список названий языков, за исключением тех, что разработаны первой или последней (задавать с помощью параметра) по алфавиту фирмой. Структура БД такая:
N | ТИП | ЯЗЫК | ФИРМА
PM MAIL   Вверх
Akina
Дата 25.11.2015, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 453



Код

WHERE ROWNUM > 1



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 29.12.2015, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3470
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Akina @  25.11.2015,  20:40 Найти цитируемый пост)
WHERE ROWNUM > 1

smile
Просто, чтоб ты знал. Rownum вычисляется на этапе фетча, а предикат rownum > 1 прервет фетч первой строки, соответственно второй никогда не будет
Код

SQL> select count(*) from all_objects;

  COUNT(*)
----------
     69180

SQL> select 'Foo' from all_objects where rownum > 1;

no rows selected


У студента явно была лаба по аналитическим (aka ранжирующим, aka оконным) функциям.
Код

select N, "ТИП", "ЯЗЫК", "ФИРМА"
from
(
    select
        t.*,
        dence_rank() over(order by "ФИРМА") rank_ask,
        dence_rank() over(order by "ФИРМА" desc) rank_desc
    from table t
)
where
     decode(:param_except, 'FIRST',rank_ask, 'LAST',rank_desc) != 1



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 29.12.2015, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 453



Цитата(Zloxa @  29.12.2015,  11:34 Найти цитируемый пост)
Rownum вычисляется на этапе фетча, а предикат rownum > 1 прервет фетч первой строки, соответственно второй никогда не будет

Мда... это называется "дооптимизировались"... впрочем, ничто не мешает сделать типа
Код

select * from
(select *, rownum() as rn from table order by field)
where rn > 1


Цитата(Zloxa @  29.12.2015,  11:34 Найти цитируемый пост)
предикат rownum > 1 прервет фетч первой строки

Документация объясняет немного иначе. Она говорит, что первая строка будет получена и отброшена, ибо предикат даёт false. Следующая строка, с учётом отброшенной, станет первой, предикат опять даст false... и так далее. 
А фетч прерывается потому, что оптимизатор знает, что такая фигня будет продолжаться до конца выборки.

Это сообщение отредактировал(а) Akina - 29.12.2015, 11:17


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 29.12.2015, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3470
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Akina @  29.12.2015,  11:53 Найти цитируемый пост)
впрочем, ничто не мешает сделать типа

Условие задачи мешает ) Фирма тут может быть не уникальной )
Потому тут надо where фирма not in (select фирма from.... order by.... where rn = 1), что есть суть MAX/MIN


Это сообщение отредактировал(а) Zloxa - 29.12.2015, 11:31


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 29.12.2015, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 453



Цитата(Zloxa @  29.12.2015,  12:30 Найти цитируемый пост)
Условие задачи мешает

Чёрт, я про неё уже и забыл...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.1371 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.