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

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

44

Tergantung pada RDBMS Anda

MS SQL Server

SELECT TOP 10 ...

MySQL

SELECT ... LIMIT 10

Sybase

SET ROWCOUNT 10
SELECT ...

Dll


7
Sintaks ... LIMIT 10 juga digunakan oleh sqlite3
dat

24

Di MySQL:

SELECT * FROM `table` LIMIT 0, 10

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.


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)


untuk PostgreSQL juga
ralf.w.


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


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


1

PostgreSQL:

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


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.