Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

Выборка первых 100 строк в Oracle: использование ROW_NUMBER()

Быстрый ответ

Чтобы выбрать первые 100 строк в Oracle, используйте следующий запрос с псевдоколонкой ROWNUM:

SQL
Скопировать код
SELECT * FROM (
  SELECT имя_колонки FROM ваша_таблица ORDER BY колонка_сортировки
) WHERE ROWNUM <= 100;

Замените имя_колонки, ваша_таблица и колонка_сортировки на соответствующие значения из вашей базы данных.

Кинга Идем в IT: пошаговый план для смены профессии

Особенности ROWNUM и сортировки

Псевдоколонка ROWNUM получает значение ещё до выполнения сортировки, если ORDER BY располагается вне подзапроса. Важно учесть, что сортировка должна производиться внутри подзапроса.

Почему нам нужно сортировать внутри подзапроса?

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

Отображение последних заказов клиентов

Если вам нужны последние заказы клиентов, в особенности первые 100 из них, используйте функцию ROW_NUMBER():

SQL
Скопировать код
SELECT * FROM (
  SELECT client_id, order_id, create_time, 
         ROW_NUMBER() OVER (PARTITION BY client_id ORDER BY create_time DESC) as rn
  FROM orders
) WHERE rn = 1 AND ROWNUM <= 100;

Использование FETCH FIRST в Oracle 12c

В Oracle 12c вы можете использовать клавишное слово FETCH FIRST, которое значительно упростит ограничение результатов выборки:

SQL
Скопировать код
SELECT client_id, order_id, create_time
FROM orders
ORDER BY create_time DESC
FETCH FIRST 100 ROWS ONLY;

Точность использования функций min/max

Для выборки первого или последнего значения в каждой группе применяйте функции min() и max():

SQL
Скопировать код
SELECT client_id, MIN(order_id) as first_order_id
FROM orders
GROUP BY client_id
FETCH FIRST 100 ROWS ONLY;

Оптимизация запросов

С учётом особенностей работы вашей базы данных, стоит использовать индексы по столбцам, используемым в сортировке, для повышения производительности.

Визуализация

Пример рейтинговой таблицы, отображающей топ-100 игроков:

SQL
Скопировать код
SELECT * FROM (
  SELECT имя_игрока, счет,
         ROW_NUMBER() OVER (ORDER BY счет DESC) as позиция
  FROM игровые_очки
) WHERE позиция <= 100;

Этот запрос позволяет надёжно отображать топ-100 игроков.

Markdown
Скопировать код
🎮 Рейтинг игроков:
| Позиция | Имя игрока   | Очки |
| -------- | ------------- | ----- |
| 1        | AceGamer123   | 950   |
| ...      | ...           | ...   |
| 100      | LastInLeague  | 500   |

Работа со старыми версиями Oracle

В старых версиях Oracle использование ROWNUM после ORDER BY может привести к ошибкам. Учтите, что значения ROWNUM присваиваются до сортировки:

SQL
Скопировать код
SELECT * FROM (
  SELECT имя_колонки, ROWNUM as rn
  FROM (SELECT имя_колонки FROM ваша_таблица ORDER BY колонка_сортировки)
) WHERE rn <= 100;

Необходимо выполнить сортировку до применения ROWNUM.

Сложные запросы? Не беспокойтесь!

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

Рассмотрим ограничение строк подробнее

Для развития навыков работы с ограничением строк в Oracle изучите представленные ниже полезные материалы.

Полезные материалы

  1. SELECT — Описание оператора SELECT от Oracle.
  2. How to I limit the number of rows returned by an Oracle query after ordering? – Stack Overflow — Обсуждение вопроса ограничения числа строк после сортировки на Stack Overflow.
  3. Getting rows N through M of a result set – Ask TOM — Советы от Ask TOM по ограничению числа строк.
  4. YouTube Video Tutorial – Oracle SQL: Top N Query — Видеоурок по созданию запросов с ограничением числа строк для тех, кто предпочитает видео формат.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой запрос используется для выбора первых 100 строк в Oracle?
1 / 5