SQL: selezionare solo le prime 10 righe?


124

Come si selezionano solo i primi 10 risultati di una query?

Vorrei visualizzare solo i primi 10 risultati dalla seguente query:

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
Si prega di menzionare il database (e la versione).
Vikas Goel

2
Dovrebbe essere la nuova risposta, stackoverflow.com/a/36476971/124486
Evan Carroll

Prova anche TOP 10
Prisoner ZERO

Risposte:


173

In SQL Server, usa:

select top 10 ...

per esempio

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

In MySQL, usa:

select ... order by num desc limit 10

44

Dipende dal tuo RDBMS

MS SQL Server

SELECT TOP 10 ...

MySQL

SELECT ... LIMIT 10

Sybase

SET ROWCOUNT 10
SELECT ...

Eccetera.


7
La sintassi ... LIMIT 10 è utilizzata anche da sqlite3
dat

24

In MySQL:

SELECT * FROM `table` LIMIT 0, 10

1
Qual è la differenza tra limite 0, 10 e limite 10? E perché il limite di 10, 20 non mi dà 10 righe tra la 10a e la 20a riga? EDIT: Oh, quindi limitare 10, 20 significa darmi 20 righe dopo la decima riga. Se voglio righe tra 10 e 20 devo limitarne 10, 10. Grazie!
AbdurRehman Khan

21

La risposta 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

Se vuoi che i legami siano inclusi, fallo FETCH FIRST 10 ROWS WITH TIESinvece.

Per saltare un numero specificato di righe, utilizzare OFFSET, ad es

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

Salterà le prime 20 righe e quindi recupererà 10 righe.

Supportato dalle versioni più recenti di Oracle, PostgreSQL , MS SQL Server, Mimer SQL e DB2 ecc.


20

In SQL standard puoi usare:

... FETCH FIRST 10 ROWS ONLY

Questo è supportato in DB2, PostgreSQL e Oracle 12.1 (e versioni successive)


anche per PostgreSQL
ralf.w.

18

Oracolo

WHERE ROWNUM <= 10  and whatever_else ;

ROWNUMè una variabile magica che contiene il numero di sequenza di ogni riga 1 .. n .


1
Questo è sbagliato. "rownum" recupererà le prime 'n' righe dalla tabella. Non filtrerà dalla condizione "any_else"!
Vikas Goel

stackoverflow.com/questions/874082/… Si prega di seguire la risposta di stili per Oracle DB correlato
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  

Questo ha funzionato per me Se posso, ho pochi dbscripts utili che puoi dare un'occhiata

Dbscripts utili


2

Quello che stai cercando è una clausola 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


1

PostgreSQL:

SELECT ... LIMIT [num] OFFSET [num];


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.