262 Приложение B
> LIMIT 2, 999999999; +++
| open_emp_id | how_many |
+++
| 16 | 6 |
| 13 | 3 |
+++
2 rows in set (0.00 sec)
В этом варианте запроса отбрасываются нулевая и первая записи, а в ре
зультат включаются все записи вплоть до 999 999 999, начиная со вто
рой (в данном случае таких записей всего две, но лучше немного пере
усердствовать, чем потерять нужные записи, недооценив их количество).
Ранжирующие запросы Запросы, включающие блок
limit
в сочетании с блоком
order
by
, можно
назвать
ранжирующими запросами (
ranking queries ), потому что они
позволяют ранжировать данные. Я уже продемонстрировал пример
ранжирования банковских сотрудников по числу открытых счетов.
Но ранжирующие запросы используются для решения многих при
кладных задач, таких как поиск:
• Пяти лучших продавцов 2005 года
• Третьего по числу круговых пробежек игрока в истории бейсбола
• 98 бестселлеров всех времен и народов, кроме Библии и цитатника
Мао
• Двух самых непопулярных видов мороженого
Уже было рассмотрено, как найти трех лучших операционистов, тре
тьего лучшего и всех, кроме двух лучших. Если я хочу сделать чтото
аналогичное для четвертого примера (например, найти
худших со
трудников), требуется просто изменить порядок сортировки на обрат
ный, так чтобы результаты располагались, начиная с наименьшего
числа открытых счетов и до наибольшего:
mysql>
SELECT open_emp_id, COUNT(*) how_many > FROM account > GROUP BY open_emp_id > ORDER BY how_many ASC > LIMIT 2; +++
| open_emp_id | how_many |
+++
| 13 | 3 |
| 16 | 6 |
+++
2 rows in set (0.24 sec)
За счет простого изменения порядка сортировки (с
ORDER
BY
how_many
DESC
на
ORDER
BY
how_many
ASC
) теперь запрос возвращает двух наихудших
операционистов. Таким образом, с помощью блока с возрастающим