SQL - выбрать только первые 10 строк?


124

Как выбрать только первые 10 результатов запроса?

Я хотел бы отобразить только первые 10 результатов следующего запроса:

SELECT a.names,
         COUNT(b.post_title) AS num
    FROM wp_celebnames a
    JOIN wp_posts b ON INSTR(b.post_title, a.names) > 0
    WHERE b.post_date > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
GROUP BY a.names
ORDER BY num DESC

3
Пожалуйста, укажите базу данных (и версию).
Vikas Goel

2
Должен быть новый ответ, stackoverflow.com/a/36476971/124486
Эван Кэрролл,

Также попробуйте TOP 10
Prisoner ZERO

Ответы:


173

На сервере SQL используйте:

select top 10 ...

например

select top 100 * from myTable
select top 100 colA, colB from myTable

В MySQL используйте:

select ... order by num desc limit 10

44

Зависит от вашей СУБД

MS SQL Server

SELECT TOP 10 ...

MySQL

SELECT ... LIMIT 10

Sybase

SET ROWCOUNT 10
SELECT ...

И т.п.


7
Синтаксис ... LIMIT 10 также используется sqlite3
dat

24

В MySQL:

SELECT * FROM `table` LIMIT 0, 10

1
В чем разница между пределом 0, 10 и пределом 10? И почему не ограничивая 10, 20 дает мне 10 строк между 10-м и 20-м рядами? РЕДАКТИРОВАТЬ: О, так что ограничение 10, 20 означает, что дайте мне 20 строк после 10-й строки. Если мне нужны строки от 10 до 20, я должен использовать limit 10, 10. Спасибо!
Абдур Рехман Хан 01

21

Ответ ANSI SQL FETCH FIRST.

SELECT a.names,
         COUNT(b.post_title) AS num
    FROM wp_celebnames a
    JOIN wp_posts b ON INSTR(b.post_title, a.names) > 0
    WHERE b.post_date > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
GROUP BY a.names
ORDER BY num DESC
FETCH FIRST 10 ROWS ONLY

Если хотите, чтобы галстуки были включены, сделайте FETCH FIRST 10 ROWS WITH TIES .

Чтобы пропустить указанное количество строк, используйте OFFSET, например,

...
ORDER BY num DESC
OFFSET 20
FETCH FIRST 10 ROWS ONLY

Пропускает первые 20 рядов, а затем выбирает 10 рядов.

Поддерживается более новыми версиями Oracle, PostgreSQL , MS SQL Server, Mimer SQL и DB2 и т. Д.


20

В стандартном SQL вы можете использовать:

... FETCH FIRST 10 ROWS ONLY

Это поддерживается в DB2, PostgreSQL и Oracle 12.1 (и более поздних версиях).


для PostgreSQL тоже
ralf.w.

18

оракул

WHERE ROWNUM <= 10  and whatever_else ;

ROWNUM- это магическая переменная, которая содержит порядковый номер каждой строки 1 .. n .


1
Это не верно. "rownum" извлечет из таблицы верхние 'n' строк. Он не будет отфильтровывать условие "безотносительно"!
Vikas Goel

stackoverflow.com/questions/874082/… Пожалуйста, следуйте ответу Стили для БД, связанной с Oracle
Викас Гоэль

2
SELECT *  
  FROM (SELECT ROW_NUMBER () OVER (ORDER BY user_id) user_row_no, a.* FROM temp_emp a)  
 WHERE user_row_no > 1 and user_row_no <11  

У меня это сработало. Если можно, у меня есть несколько полезных скриптов, которые вы можете посмотреть

Полезные скрипты Dbscripts


2

То, что вы ищете, - это предложение LIMIT.

SELECT a.names,
         COUNT(b.post_title) AS num
    FROM wp_celebnames a
    JOIN wp_posts b ON INSTR(b.post_title, a.names) > 0
    WHERE b.post_date > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
GROUP BY a.names
ORDER BY num DESC
   LIMIT 10




Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.