SQL - ¿Seleccionar solo las primeras 10 filas?


124

¿Cómo selecciono solo los primeros 10 resultados de una consulta?

Me gustaría mostrar solo los primeros 10 resultados de la siguiente consulta:

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
Mencione la base de datos (y la versión).
Vikas Goel

2
Debería ser la nueva respuesta, stackoverflow.com/a/36476971/124486
Evan Carroll

Prueba también TOP 10
Prisoner ZERO

Respuestas:


173

En el servidor SQL, use:

select top 10 ...

p.ej

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

En MySQL, use:

select ... order by num desc limit 10

44

Depende de su RDBMS

MS SQL Server

SELECT TOP 10 ...

MySQL

SELECT ... LIMIT 10

Sybase

SET ROWCOUNT 10
SELECT ...

Etc.


7
La sintaxis ... LIMIT 10 también es utilizada por sqlite3
dat

24

En MySQL:

SELECT * FROM `table` LIMIT 0, 10

1
¿Cuál es la diferencia entre el límite 0, 10 y el límite 10? ¿Y por qué el límite de 10, 20 no me da 10 filas entre las filas 10 y 20? EDITAR: Oh, entonces límite 10, 20 significa dame 20 filas después de la décima fila. Si quiero filas entre 10 y 20 tengo que hacer un límite de 10, 10. ¡Gracias!
AbdurRehman Khan

21

La respuesta ANSI SQL es 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 desea que se incluyan los lazos, hágalo en su FETCH FIRST 10 ROWS WITH TIESlugar.

Para omitir un número específico de filas, use OFFSET, p. Ej.

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

Omitirá las primeras 20 filas y luego buscará 10 filas.

Compatible con versiones más recientes de Oracle, PostgreSQL , MS SQL Server, Mimer SQL y DB2, etc.


20

En SQL estándar puede utilizar:

... FETCH FIRST 10 ROWS ONLY

Esto es compatible con DB2, PostgreSQL y Oracle 12.1 (y posteriores)


para PostgreSQL también
ralf.w.

18

Oráculo

WHERE ROWNUM <= 10  and whatever_else ;

ROWNUMes una variable mágica que contiene el número de secuencia de cada fila 1 .. n .


1
Esto está mal. "rownum" buscará las primeras n filas de la tabla. ¡No filtrará desde la condición "lo que sea"!
Vikas Goel

stackoverflow.com/questions/874082/… Siga la respuesta de stili para la base de datos relacionada con 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  

Esto funcionó para mí Si puedo, tengo algunos dbscripts útiles que puedes ver

Dbscripts útiles


2

Lo que busca es una cláusula 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




Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.