SQL - Pilih 10 baris pertama saja?

124

Bagaimana cara memilih hanya 10 hasil pertama dari sebuah kueri?

Saya hanya ingin menampilkan 10 hasil pertama dari kueri berikut:

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
sumber
3
Sebutkan database (dan versinya).
Vikas Goel
2
Harus menjadi jawaban baru, stackoverflow.com/a/36476971/124486
Evan Carroll
Coba juga TOP 10
Prisoner ZERO

Jawaban:

173

Di SQL server, gunakan:

select top 10 ...

misalnya

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

Di MySQL, gunakan:

select ... order by num desc limit 10
Derek Slager
sumber
44

Tergantung pada RDBMS Anda

MS SQL Server

SELECT TOP 10 ...

MySQL

SELECT ... LIMIT 10

Sybase

SET ROWCOUNT 10
SELECT ...

Dll

martin clayton
sumber
7
Sintaks ... LIMIT 10 juga digunakan oleh sqlite3
dat
24

Di MySQL:

SELECT * FROM `table` LIMIT 0, 10
Ben
sumber
1
Apa perbedaan antara limit 0, 10 dan limit 10? Dan mengapa tidak membatasi 10, 20 memberi saya 10 baris antara baris ke-10 dan ke-20? EDIT: Oh, jadi batasi 10, 20 berarti beri saya 20 baris setelah baris ke-10. Jika saya ingin baris antara 10 dan 20 saya harus melakukan batas 10, 10. Terima kasih!
AbdurRehman Khan
21

Jawaban ANSI SQL adalah 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

Jika Anda ingin memasukkan ikatan, lakukan FETCH FIRST 10 ROWS WITH TIESsaja.

Untuk melewati sejumlah baris tertentu, gunakan OFFSET, misalnya

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

Akan melewati 20 baris pertama, lalu mengambil 10 baris.

Didukung oleh versi terbaru dari Oracle, PostgreSQL , MS SQL Server, Mimer SQL dan DB2 dll.

jarlh
sumber
20

Dalam SQL standar, Anda dapat menggunakan:

... FETCH FIRST 10 ROWS ONLY

Ini didukung di DB2, PostgreSQL dan Oracle 12.1 (dan yang lebih baru)

brabster
sumber
untuk PostgreSQL juga
ralf.w.
18

Peramal

WHERE ROWNUM <= 10  and whatever_else ;

ROWNUMadalah variabel ajaib yang berisi nomor urut setiap baris 1 .. n .

wallyk
sumber
1
Ini salah. "rownum" akan mengambil baris 'n' teratas dari tabel. Ini tidak akan memfilter dari kondisi "anything_else"!
Vikas Goel
stackoverflow.com/questions/874082/… Ikuti jawaban dari stili untuk DB terkait 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  

Ini berhasil untuk saya. Jika boleh, saya memiliki beberapa dbscrip yang berguna yang dapat Anda lihat

Dbscripts yang berguna

sayannayas
sumber
2

Yang Anda cari adalah klausa 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
sumber
1

Firebird:

SELECT FIRST 10 * FROM MYTABLE
ne2dmar.dll
sumber
1

PostgreSQL:

SELECT ... LIMIT [num] OFFSET [num];
Henry
sumber
0
SELECT* from <table name> WHERE rownum <= 10;
kiran kumar
sumber
menurut di sini: w3schools.com/sql/sql_top.asp Ini adalah jawaban yang terdaftar untuk Oracle .. Up vote.
eaglei22
0
SELECT  Top(12) Month, Year, Code FROM TempEmp 
ORDER BY  Year DESC,month DESC
JIYAUL MUSTAPHA
sumber