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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ограничить выборку строк при select-е с group 
V
    Опции темы
Juggle
  Дата 27.5.2011, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите ограничить выборку строк. 
Есть запрос:

SELECT table_name, COUNT(*)
FROM all_indexes
WHERE table_source = 2
GROUP BY table_name
HAVING COUNT(*) = 2;


Мне надо чтобы выводились только любые найденные 10 строк. Были попытки ограничить при помощи rownum, но пока что неудачно. Может есть другие способы сделать это?
PM MAIL   Вверх
cra6
Дата 27.5.2011, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



select * from(
SELECT table_name, COUNT(*)
FROM all_indexes
WHERE table_source = 2
GROUP BY table_name
HAVING COUNT(*) = 2) where rownum < 10
PM MAIL   Вверх
Juggle
Дата 27.5.2011, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Так конечно сработает, но ограничение срок задумывалось как ускорение отработки скрипта. В предложенном варианте мой скрипт будет отрабатываться по всем строкам - а этого очень хочется избежать.
Может есть еще варианты?
PM MAIL   Вверх
Zloxa
Дата 27.5.2011, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(Juggle @  27.5.2011,  13:56 Найти цитируемый пост)
ограничение срок задумывалось как ускорение отработки скрипта

В случае группировки ограничение количества строк не приведет к желаемому, по вполне понятным причинам. Чтобы собрать одну группу, всяко надо просканировать всю таблицу.
Цитата(Juggle @  27.5.2011,  13:56 Найти цитируемый пост)
Может есть еще варианты? 

если есть мастер таблица и индекс в детейле, можно попробовать забрать скаляром

Код

select /*+first_rows*/table_name
          ,(select count(*) from user_indexes s where t. table_name = s.table_name)
from user_tables t
where rownum <= 10  

/*но на вьюхах словарей профит этого подхода будет обнаружен врядли*/

Можно посмотреть в сторону аггрегирующего материалзиованного представления с фаст рефрешем по коммиту и квери-ревритом. Однако этот подход тоже нельзя продемонстриовать на словарных вьюхах

Это сообщение отредактировал(а) Zloxa - 27.5.2011, 14:39


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


Новичок



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

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



>>Чтобы собрать одну группу, всяко надо просканировать всю таблицу.
А может как-то можно ограничить это сканирование скажем так первой 1000 строк?

>>если есть мастер таблица и индекс в детейле, можно попробовать забрать скаляром
Вариант наверное хороший, но не понятный для меня.
PM MAIL   Вверх
Zloxa
Дата 27.5.2011, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(Juggle @  27.5.2011,  14:47 Найти цитируемый пост)
А может как-то можно ограничить это сканирование скажем так первой 1000 строк?

запросто, тогда в результате будут цены на дрова 
Код

select table_name,count(*)
from (select * from dba_tab_columns where rownum < 10)
group by table_name

Цитата(Juggle @  27.5.2011,  14:47 Найти цитируемый пост)
 но не понятный для меня. 

Могу попытаться понять за Вас  smile 

Это сообщение отредактировал(а) Zloxa - 27.5.2011, 16:44


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


Новичок



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

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



Спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




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


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

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