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

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

44

Dépend de votre SGBDR

MS SQL Server

SELECT TOP 10 ...

MySQL

SELECT ... LIMIT 10

Sybase

SET ROWCOUNT 10
SELECT ...

Etc.


7
La ... LIMIT 10 syntaxe est également utilisé par sqlite3
dat

24

Dans MySQL:

SELECT * FROM `table` LIMIT 0, 10

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.


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)


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 .


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


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


1

PostgreSQL:

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


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.