CftClub.ru
Клуб специалистов ЦФТ-Банк

Вывод максимальных значений

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Уроки ЦФТ-Банк для начинающих
Предыдущая тема :: Следующая тема  
Автор Сообщение
raxat_tl
Участник со стажем


Вступление в Клуб: 04.03.2016
СообщениеПт Апр 15, 2016 12:11   Вывод максимальных значений Ответить с цитатой
Полезность: Нет оценки
Добрый день.
Подскажите пож-та возможно ли в цфт сделать с помощью запроса вывод определенное количество записей с максимальными например балансом и суммой денег.
prankster
Профи


Вступление в Клуб: 22.08.2014
СообщениеПт Апр 15, 2016 12:25   Re: Вывод максимальных значений Ответить с цитатой
Полезность: Нет оценки
raxat_tl пишет:
Добрый день.
Подскажите пож-та возможно ли в цфт сделать с помощью запроса вывод определенное количество записей с максимальными например балансом и суммой денег.


Аналитические функции могут творить чудеса Smile
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеПн Апр 18, 2016 10:23    Ответить с цитатой
Полезность: Нет оценки
Ну, например, так - 100 записей с максимальной суммой договора депозита

for dep in ::[DEPN]
where rownum <= 100
order by dep.[SUMMA_DOG] desc
loop ...


Последний раз редактировалось: yaffil (Пн Апр 18, 2016 10:49), всего редактировалось 1 раз
timochev
Эксперт


Вступление в Клуб: 02.07.2007
СообщениеПн Апр 18, 2016 10:48    Ответить с цитатой
Полезность: Нет оценки
yaffil пишет:
Ну, например, так - 100 записей с максимальной суммой договора депозита

for dep in ::[DEPN]
where rownum => 100
order by dep.[SUMMA_DOG] desc
loop ...


>=

If an ORDER BY clause follows ROWNUM in the same query, then the rows will be reordered by the ORDER BY clause. The results can vary depending on the way the rows are accessed. For example, if the ORDER BY clause causes Oracle to use an index to access the data, then Oracle may retrieve the rows in a different order than without the index. Therefore, the following statement does not necessarily return the same rows as the preceding example:

SELECT *
FROM employees
WHERE ROWNUM < 11
ORDER BY last_name;

If you embed the ORDER BY clause in a subquery and place the ROWNUM condition in the top-level query, then you can force the ROWNUM condition to be applied after the ordering of the rows. For example, the following query returns the employees with the 10 smallest employee numbers. This is sometimes referred to as top-N reporting:

SELECT *
FROM (SELECT * FROM employees ORDER BY employee_id)
WHERE ROWNUM < 11;
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеПн Апр 18, 2016 10:49    Ответить с цитатой
Полезность: Нет оценки
Ну промазал, прям не понятно чтоли )) Поправил
Это цикл а не селект, в цикле норм отрабатывает
Alkov
Профи


Вступление в Клуб: 23.09.2010
СообщениеПн Апр 18, 2016 10:59    Ответить с цитатой
Полезность: Нет оценки
вместо rownum ща нв 12-ом можно ввернуть
fetch first 100 rows only
Wink
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеПн Апр 18, 2016 11:08    Ответить с цитатой
Полезность: Нет оценки
Alkov пишет:
вместо rownum ща нв 12-ом можно ввернуть
fetch first 100 rows only
Wink


А ЦФТ включило в свой компилятор PL+ эту новую конструкцию?
timochev
Эксперт


Вступление в Клуб: 02.07.2007
СообщениеПн Апр 18, 2016 11:09    Ответить с цитатой
Полезность: Нет оценки
yaffil пишет:
Это цикл а не селект, в цикле норм отрабатывает

на какой версии это нормально отрабатывает???
Эмиралька
Эксперт


Вступление в Клуб: 09.11.2015
СообщениеВт Апр 19, 2016 11:25    Ответить с цитатой
Полезность: Нет оценки
yaffil пишет:
Alkov пишет:
вместо rownum ща нв 12-ом можно ввернуть
fetch first 100 rows only
Wink


А ЦФТ включило в свой компилятор PL+ эту новую конструкцию?


Нет, и не включит.
Потому что ещё есть схемы на 11g, а код везде должен быть одинаковым.
Да и баловство это.

Код:

select * from
(
select .. order by ...
)
where rownum <= 100
Эмиралька
Эксперт


Вступление в Клуб: 09.11.2015
СообщениеВт Апр 19, 2016 11:27    Ответить с цитатой
Полезность: Нет оценки
timochev пишет:
yaffil пишет:
Это цикл а не селект, в цикле норм отрабатывает

на какой версии это нормально отрабатывает???

Он имел в виду сделать счётчик на переменной и из цикла выйти вовремя.
А условие с rownum он добавил уже при записи сообщения в форум, скорее всего.
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеВт Апр 19, 2016 11:40    Ответить с цитатой
Полезность: Нет оценки
Эмиралька пишет:


Нет, и не включит.
Потому что ещё есть схемы на 11g, а код везде должен быть одинаковым.
Да и баловство это.

Код:

select * from
(
select .. order by ...
)
where rownum <= 100



Почему не включит? Это Т.Я. он на каждой версии свой, на последних версиях Т.Я. и версии - 12 оракл обязательное условие.
А селект в селекте - да, баловство, лучше счётчик в цикле и выход по условию. Для продуктивности системы.
timochev
Эксперт


Вступление в Клуб: 02.07.2007
СообщениеВт Апр 19, 2016 13:00    Ответить с цитатой
Полезность: Нет оценки
yaffil пишет:
Ну, например, так - 100 записей с максимальной суммой договора депозита

for dep in ::[DEPN]
where rownum <= 100
order by dep.[SUMMA_DOG] desc
loop ...

В итоге я так и не понял, этот код где-то реально работает в соответствии с описанием?
Зачем людей путать?
Эмиралька
Эксперт


Вступление в Клуб: 09.11.2015
СообщениеСр Апр 20, 2016 06:28    Ответить с цитатой
Полезность: Нет оценки
timochev пишет:
yaffil пишет:
Ну, например, так - 100 записей с максимальной суммой договора депозита

for dep in ::[DEPN]
where rownum <= 100
order by dep.[SUMMA_DOG] desc
loop ...

В итоге я так и не понял, этот код где-то реально работает в соответствии с описанием?
Зачем людей путать?

Этот - нет.
Эмиралька
Эксперт


Вступление в Клуб: 09.11.2015
СообщениеСр Апр 20, 2016 06:30    Ответить с цитатой
Полезность: Нет оценки
yaffil пишет:
Эмиралька пишет:
Нет, и не включит.
Потому что ещё есть схемы на 11g, а код везде должен быть одинаковым.

Почему не включит? Это Т.Я. он на каждой версии свой, на последних версиях Т.Я. и версии - 12 оракл обязательное условие.

Нет, ну включит, когда с 11g все завяжут.

yaffil пишет:
Эмиралька пишет:
Да и баловство это.

Код:

select * from
(
select .. order by ...
)
where rownum <= 100



А селект в селекте - да, баловство, лучше счётчик в цикле и выход по условию. Для продуктивности системы.


По-моему, Вы неправильно поняли.
Я говорила, что top 100 - новый синтаксис Oracle 12 c - это баловство, потому что элементарно покрывается старым синтаксисом - как раз селект в селекте. И привела пример как раз для иллюстрации, как он выглядит.
И при чём тут цикл? Непонятно...

Ну и ещё.
вот это
Alkov пишет:
fetch first 100 rows only
выглядит как fetch bulk collect into .... limit 100 - и это тоже старый синтаксис.

Вообще, я смотрю, в теме напутано изрядно...
svn
Профи


Вступление в Клуб: 04.02.2008
СообщениеСр Апр 20, 2016 11:00    Ответить с цитатой
Полезность: Нет оценки
все ТЯ ещё поддерживают 11g
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Уроки ЦФТ-Банк для начинающих Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru