2010-04-06 2 views
2

Меня попросили в интервью написать SQL-запрос, который извлекает первые три записи с наибольшим значением в некотором столбце из таблицы. Я написал запрос, который извлекал все записи с наивысшим значением, но не понял, как именно я могу получить только первые три записи этих.Простой вопрос по запросу базы данных

Не могли бы вы помочь мне в этом.

Спасибо.

ответ

5

SELECT TOP 3 * FROM Table ORDER BY FieldName DESC

От here, но может быть немного устарели:

Postgresql:

SELECT * FROM Table ORDER BY FieldName DESC LIMIT 3 

MS SQL Server:

SELECT TOP 3 * FROM Table ORDER BY FieldName DESC 

MySql:

SELECT * FROM Table ORDER BY FieldName DESC LIMIT 3 
+1

Это не верно для Oracle. Он применяет WHERE перед ORDER BY, поэтому вы получаете 10 строк, которые соответствуют, затем сортирует их. –

+0

@WW - Переход на удаление Oracle, например. тогда. Мое понимание этого не достаточно сложное, чтобы ответить на него полностью. Это было первоначально из ссылки, размещенной в ответе. –

+0

В Oracle 'SELECT R. * FROM (SELECT * FROM SomeTable ORDER by FieldName DESC) R WHERE rownum <4' сделает трюк для вас. Конечно, есть еще один метод, включающий аналитические функции «LEAD, LAG» Oracle Analytical, которые здесь не рассматриваются. – Guru

1

В зависимости от двигателя базы данных, либо

select top 3 * from table order by column desc

или

select * from table order by column desc limit 3

+0

или что-то еще на Oracle ... – Thilo

0

Синтаксис TOP 3 колеблется в широких пределах от базы данных в базу данных.

К сожалению, вам необходимо использовать эти конструкции для лучшей производительности. Библиотеки, подобные Hibernate, помогают здесь, потому что они могут переводить общий API в различные диалекты SQL.

Поскольку вы спрашиваете о Java, можно просто выбрать все из базы данных (с помощью ORDER BY), а просто извлечь только первые три строки. В зависимости от того, как должен выполняться запрос, это может быть достаточно хорошим (особенно если сортировка по базе данных не произойдет из-за соответствующих индексов, например, при сортировке по полям первичного ключа).

Но в целом вы хотите пойти с SQL-решением.

0

В оракула вы также можете использовать где ROWNUM < 4 ...

Также на MySQL есть ключевое слово Limit (я думаю)

Смежные вопросы