SQL - Sélectionnez uniquement les 10 premières lignes?

124

Comment sélectionner uniquement les 10 premiers résultats d'une requête?

Je souhaite afficher uniquement les 10 premiers résultats de la requête suivante:

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
Mike
la source
3
Veuillez mentionner la base de données (et la version).
Vikas Goel le
2
Devrait être la nouvelle réponse, stackoverflow.com/a/36476971/124486
Evan Carroll
Essayez aussi TOP 10
Prisoner ZERO

Réponses:

173

Dans SQL Server, utilisez:

select top 10 ...

par exemple

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

Dans MySQL, utilisez:

select ... order by num desc limit 10
Derek Slager
la source
44

Dépend de votre SGBDR

MS SQL Server

SELECT TOP 10 ...

MySQL

SELECT ... LIMIT 10

Sybase

SET ROWCOUNT 10
SELECT ...

Etc.

Martin Clayton
la source
7
La ... LIMIT 10 syntaxe est également utilisé par sqlite3
dat
24

Dans MySQL:

SELECT * FROM `table` LIMIT 0, 10
Ben
la source
1
Quelle est la différence entre la limite 0, 10 et la limite 10? Et pourquoi ne pas limiter 10, 20 me donne 10 lignes entre les 10e et 20e lignes? EDIT: Oh, alors limite 10, 20 signifie me donner 20 lignes après la 10e ligne. Si je veux des lignes entre 10 et 20, je dois faire une limite de 10, 10. Merci!
AbdurRehman Khan
21

La réponse ANSI SQL est 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

Si vous voulez que les liens soient inclus, faites-le à la FETCH FIRST 10 ROWS WITH TIESplace.

Pour ignorer un nombre spécifié de lignes, utilisez OFFSET, par exemple

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

Sautera les 20 premières lignes, puis récupérera 10 lignes.

Pris en charge par les nouvelles versions d'Oracle, PostgreSQL , MS SQL Server, Mimer SQL et DB2, etc.

jarlh
la source
20

En SQL standard, vous pouvez utiliser:

... FETCH FIRST 10 ROWS ONLY

Ceci est pris en charge dans DB2, PostgreSQL et Oracle 12.1 (et versions ultérieures)

brabster
la source
pour PostgreSQL aussi
ralf.w.
18

Oracle

WHERE ROWNUM <= 10  and whatever_else ;

ROWNUMest une variable magique qui contient le numéro de séquence de chaque ligne 1 .. n .

marcher
la source
1
C'est faux. "rownum" récupérera les 'n' premières lignes de la table. Il ne filtrera pas à partir de la condition "any_else"!
Vikas Goel
stackoverflow.com/questions/874082/… Veuillez suivre la réponse de stili pour la base de données relative à 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  

Cela a fonctionné pour moi.Si je peux, j'ai quelques dbscripts utiles que vous pouvez consulter

Dbscripts utiles

Sayannayas
la source
2

Ce que vous recherchez, c'est une clause 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
la source
1

Oiseau de feu:

SELECT FIRST 10 * FROM MYTABLE
ne2dmar
la source
1

PostgreSQL:

SELECT ... LIMIT [num] OFFSET [num];
Henri
la source
0
SELECT  Top(12) Month, Year, Code FROM TempEmp 
ORDER BY  Year DESC,month DESC
JIYAUL MUSTAPHA
la source