SQL - Chỉ chọn 10 hàng đầu tiên?


124

Làm cách nào để chỉ chọn 10 kết quả đầu tiên của một truy vấn?

Tôi chỉ muốn hiển thị 10 kết quả đầu tiên từ truy vấn sau:

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
Vui lòng đề cập đến cơ sở dữ liệu (và phiên bản).
Vikas Goel

2
Nên là câu trả lời mới, stackoverflow.com/a/36476971/124486
Evan Carroll

Cũng thử TOP 10
Prisoner ZERO

Câu trả lời:


173

Trong máy chủ SQL, sử dụng:

select top 10 ...

ví dụ

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

Trong MySQL, sử dụng:

select ... order by num desc limit 10

44

Phụ thuộc vào RDBMS của bạn

MS SQL Server

SELECT TOP 10 ...

MySQL

SELECT ... LIMIT 10

Sybase

SET ROWCOUNT 10
SELECT ...

Vân vân.


7
Cú pháp ... LIMIT 10 cũng được sử dụng bởi sqlite3
dat

24

Trong MySQL:

SELECT * FROM `table` LIMIT 0, 10

1
Sự khác biệt giữa giới hạn 0, 10 và giới hạn 10 là gì? Và tại sao không giới hạn 10, 20 cho tôi 10 hàng giữa hàng 10 và 20? CHỈNH SỬA: Ồ, vậy giới hạn 10, 20 nghĩa là cho tôi 20 hàng sau hàng thứ 10. Nếu tôi muốn các hàng từ 10 đến 20, tôi phải làm giới hạn 10, 10. Cảm ơn!
AbdurRehman Khan

21

Câu trả lời ANSI SQL là 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

Nếu bạn muốn bao gồm các mối quan hệ, hãy FETCH FIRST 10 ROWS WITH TIES thay thế.

Để bỏ qua một số hàng được chỉ định, hãy sử dụng OFFSET, ví dụ:

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

Sẽ bỏ qua 20 hàng đầu tiên và sau đó tìm nạp 10 hàng.

Được hỗ trợ bởi các phiên bản mới hơn của Oracle, PostgreSQL , MS SQL Server, Mimer SQL và DB2, v.v.


20

Trong SQL chuẩn, bạn có thể sử dụng:

... FETCH FIRST 10 ROWS ONLY

Điều này được hỗ trợ trong DB2, PostgreSQL và Oracle 12.1 (và mới hơn)


cho cả PostgreSQL nữa
ralf.w.

18

Oracle

WHERE ROWNUM <= 10  and whatever_else ;

ROWNUMlà một biến ma thuật chứa số thứ tự của mỗi hàng 1 .. n .


1
Cái này sai. "rownum" sẽ tìm nạp 'n' hàng trên cùng từ bảng. Nó sẽ không lọc khỏi điều kiện "anything_else"!
Vikas Goel

stackoverflow.com/questions/874082/... Hãy làm theo câu trả lời của stili cho Oracle liên quan DB
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  

Điều này hiệu quả với tôi. Nếu tôi có thể, tôi có một số dbscripts hữu ích mà bạn có thể xem qua

Dbscripts hữu ích


2

Những gì bạn đang tìm kiếm là một điều khoản 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];


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.