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 и т. Д.

jarlh
источник
20

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

... FETCH FIRST 10 ROWS ONLY

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

brabster
источник
для PostgreSQL тоже
ralf.w.
18

оракул

WHERE ROWNUM <= 10  and whatever_else ;

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

wallyk
источник
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

sayannayas
источник
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
AvatarKava
источник
1

PostgreSQL:

SELECT ... LIMIT [num] OFFSET [num];
Генри
источник
0
SELECT* from <table name> WHERE rownum <= 10;
Киран Кумар
источник
согласно здесь: w3schools.com/sql/sql_top.asp Это перечисленный ответ для Oracle .. Голосование за.
eaglei22 08
0
SELECT  Top(12) Month, Year, Code FROM TempEmp 
ORDER BY  Year DESC,month DESC
ДЖИЯУЛЬ МУСТАФА
источник