2009-12-12 7 views
54

Как выбрать только первые 10 результатов запроса?SQL - выберите только первые 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 
+2

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

+0

Должен быть новый ответ, https://stackoverflow.com/a/36476971/124486 –

ответ

100

В сервере SQL, использование:

select top 10 ... 

например,

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

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

select ... order by num desc limit 10 
27

Зависит от РСУБД

MS SQL Server

SELECT TOP 10 ... 

MySQL

SELECT ... LIMIT 10 

Sybase

SET ROWCOUNT 10 
SELECT ... 

т.д.

+6

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

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 
14

Oracle

WHERE ROWNUM <= 10 and whatever_else ; 

ROWNUM является волшебной переменной, которая содержит порядковый номер каждой строки 1 .. п.

+0

Это неправильно. «rownum» будет извлекать верхние «n» строки из таблицы. Он не будет фильтровать из условия «any_else»! –

+0

http://stackoverflow.com/questions/874082/show-only-the-first-n-lines-of-output-of-a-sql-query Пожалуйста, следуйте ответам stili для связанных с Oracle DB –

+0

Этот ответ также работает в JPQL. – Fabian

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 

Это работало me.if я может, у меня есть несколько полезных dbscripts, что вы можете иметь вид на

Useful Dbscripts

0
SELECT* from <table name> WHERE rownum <= 10; 
+0

в соответствии с здесь: https://www.w3schools.com/sql/sql_top.asp Это список для Oracle .. Вверх. – eaglei22

7

Ответ 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 и SQL Mimer т.д.

+0

спасибо, что это было решение, которое я искал – Cjdcoy