Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
raxat_tl Участник со стажем
Вступление в Клуб: 04.03.2016
|
Пт Апр 15, 2016 12:11  Вывод максимальных значений |
|
Полезность: Нет оценки
|
Добрый день.
Подскажите пож-та возможно ли в цфт сделать с помощью запроса вывод определенное количество записей с максимальными например балансом и суммой денег. |
|
 |
prankster Профи
Вступление в Клуб: 22.08.2014
|
Пт Апр 15, 2016 12:25  Re: Вывод максимальных значений |
|
Полезность: Нет оценки
|
raxat_tl пишет: | Добрый день.
Подскажите пож-та возможно ли в цфт сделать с помощью запроса вывод определенное количество записей с максимальными например балансом и суммой денег. |
Аналитические функции могут творить чудеса  |
|
 |
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
 |
|
 |
yaffil Профи
Вступление в Клуб: 18.08.2011
|
Пн Апр 18, 2016 11:08   |
|
Полезность: Нет оценки
|
Alkov пишет: | вместо rownum ща нв 12-ом можно ввернуть
fetch first 100 rows only
 |
А ЦФТ включило в свой компилятор 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
 |
А ЦФТ включило в свой компилятор 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 |
|
 |
|