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
Еван Керролл

Також спробуйте ТОП-10
В'язень ЗЕРО

Відповіді:


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

Залежить від ваших RDBMS

MS SQL Server

SELECT TOP 10 ...

MySQL

SELECT ... LIMIT 10

Sybase

SET ROWCOUNT 10
SELECT ...

І т.д.


7
Синтаксис ... LIMIT 10 також використовується sqlite3
Дат

24

У MySQL:

SELECT * FROM `table` LIMIT 0, 10

1
Яка різниця між лімітом 0, 10 та лімітом 10? І чому не обмежує 10, 20 давати мені 10 рядків між 10-м та 20-м рядами? EDIT: О, тож обмежте 10, 20 означає, що дайте мені 20 рядків після 10-го ряду. Якщо я хочу, щоб рядки були від 10 до 20, я повинен робити обмеження 10, 10. Дякую!
АбдурРехман Хан

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

Oracle

WHERE ROWNUM <= 10  and whatever_else ;

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


1
Це неправильно. "rownum" отримає верхні "n" рядки з таблиці. Він не фільтруватиметься з умови "what_else"!
Вікас Гоел

stackoverflow.com/questions/874082/… Будь ласка, дотримуйтесь відповіді stili для БД, пов’язаного з Oracle
Vikas Goel

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, які ви можете подивитися

Корисні 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.