SQL – Selectați doar primele 10 rânduri? (Programare, Sql)

Mike a intrebat.

Cum pot selecta doar primele 10 rezultate ale unei interogări?

Aș dori să afișez doar primele 10 rezultate din următoarea interogare:

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

Comentarii

  • Vă rugăm să menționați baza de date (și versiunea). –  > Por Vikas Goel.
  • Ar trebui să fie noul răspuns, stackoverflow.com/a/36476971/124486 –  > Por Evan Carroll.
  • Încercați, de asemenea, TOP 10 –  > Por Prizonierul ZERO.
12 răspunsuri
Derek Slager

În SQL server, utilizați:

select top 10 ...

de ex.

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

În MySQL, utilizați:

select ... order by num desc limit 10

martin clayton

Depinde de RDBMS-ul dvs.

MS SQL Server

SELECT TOP 10 ...

MySQL

SELECT ... LIMIT 10

Sybase

SET ROWCOUNT 10
SELECT ...

Etc.

Comentarii

  • … Sintaxa LIMIT 10 este utilizată și de sqlite3 –  > Por dat.
Ben

În MySQL:

SELECT * FROM `table` LIMIT 0, 10

Comentarii

  • Care este diferența dintre limit 0, 10 și limit 10? Și de ce limit 10, 20 nu îmi oferă 10 rânduri între rândurile 10 și 20? EDIT: Oh, deci limit 10, 20 înseamnă să-mi dea 20 de rânduri după al 10-lea rând. Dacă vreau rânduri între 10 și 20 trebuie să fac limit 10, 10. Mulțumesc! –  > Por AbdurRehman Khan.
jarlh

Răspunsul ANSI SQL este 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

Dacă doriți ca legăturile să fie incluse, faceți FETCH FIRST 10 ROWS WITH TIES în schimb.

Pentru a sări peste un număr specificat de rânduri, utilizați OFFSET, de exemplu

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

Va sări peste primele 20 de rânduri și apoi va prelua 10 rânduri.

Este suportat de versiunile mai noi ale Oracle, PostgreSQL, MS SQL Server, Mimer SQL și DB2 etc.

brabster

În SQL standard puteți folosi:

... FETCH FIRST 10 ROWS ONLY

Acest lucru este suportat în DB2, PostgreSQL și Oracle 12.1 (și ulterior)

Comentarii

  • și pentru PostgreSQL –  > Por ralf.w..
wallyk

Oracle

WHERE ROWNUM <= 10  and whatever_else ;

ROWNUM este o variabilă magică care conține numărul de ordine al fiecărui rând 1..n.

Comentarii

  • Acest lucru este greșit. „rownum” va prelua primele „n” rânduri din tabel. Nu va filtra din condiția „whatever_else”! –  > Por Vikas Goel.
  • stackoverflow.com/questions/874082/… Vă rugăm să urmați răspunsul lui stili pentru DB legat de Oracle –  > Por Vikas Goel.
sayannayas
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  

Acest lucru a funcționat pentru mine. dacă îmi permiteți, am câteva dbscripts utile pe care le puteți arunca o privire la

Dbscripts utile

AvatarKava

Ceea ce căutați este o clauză 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

Henry

PostgreSQL:

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

Comentarii

  • Limit este primul răspuns, dar problema cu Limit este că, dacă aveți 100.000 de înregistrări și doriți să extrageți 10 cu limită, va dura tot timpul pentru a extrage 100.000 de înregistrări, apoi se va aplica limita. astfel încât interogarea sql devine mai lentă pentru înregistrări mai mari. de aceea căutăm o alternativă de limitare. –  > Por Dheeraj Thedijje.
ne2dmar

Firebird:

SELECT FIRST 10 * FROM MYTABLE

kiran kumar
SELECT* from <table name> WHERE rownum <= 10;

Comentarii

Cod
SELECT  Top(12) Month, Year, Code FROM TempEmp 
ORDER BY  Year DESC,month DESC

Tags: