web-dev-qa-db-fra.com

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

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
76
Mike

Dans le serveur SQL, 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
130
Derek Slager

Dépend de votre SGBDR

MS SQL Server

SELECT TOP 10 ...

MySQL

SELECT ... LIMIT 10

Sybase

SET ROWCOUNT 10
SELECT ...

Etc.

33
martin clayton

En MySQL:

SELECT * FROM `table` LIMIT 0, 10
16
Ben

DB2

... FETCH FIRST 10 ROWS ONLY

16
brabster

Oracle

WHERE ROWNUM <= 10  and whatever_else ;

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

15
wallyk

La réponse SQL ANSI 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 souhaitez que des liens soient inclus, utilisez plutôt FETCH FIRST 10 ROWS WITH TIES.

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

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

Va sauter les 20 premières lignes, puis aller chercher 10 lignes.

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

13
jarlh
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 regarder.

Dbscripts utiles

2
sayannayas

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
2
AvatarKava

Oiseau de feu:

SELECT FIRST 10 * FROM MYTABLE
1
ne2dmar

PostgreSQL:

SELECT ... LIMIT [num] OFFSET [num];
0
Henry
SELECT  Top(12) Month, Year, Code FROM TempEmp 
ORDER BY  Year DESC,month DESC
0
JIYAUL MUSTAPHA
SELECT* from <table name> WHERE rownum <= 10;
0
kiran kumar