Vấn đề:
Bạn muốn giới hạn số hàng xuất phát từ một truy vấn trong Oracle.
Ví dụ:
Trong exam
bảng, có tên của học sinh với kết quả của kỳ thi.
name | exam_result |
---|---|
Janet Morgen | 9 |
Taya Bain | 11 |
Anne Johnson | 11 |
Josh Kaur | 10 |
Ellen Thornton | 8 |
Bạn muốn có được ba hàng với kết quả kiểm tra tốt nhất.
Giải pháp 1:
SELECT * FROM ( SELECT * FROM exam ORDER BY exam_result DESC ) WHERE ROWNUM <= 3;
Kết quả của truy vấn trông giống như sau:
name | exam_result |
---|---|
Taya Bain | 11 |
Anne Johnson | 11 |
Josh Kaur | 10 |
Thảo luận:
Trong FROM
, sử dụng truy vấn con sắp xếp các hàng theo exam_result
theo thứ tự giảm dần.
SELECT * FROM exam ORDER BY exam_result DESC
Trong truy vấn chính, hãy viết điều kiện sao cho số hàng phải nhỏ hơn hoặc bằng 3
. Sử dụng ROWNUM (số hàng) để làm điều đó. Để đảm bảo rằng bạn sẽ chỉ nhìn thấy ba hàng đầu tiên, bạn cần có điều kiện là số hàng phải nhỏ hơn hoặc bằng 3
.
WHERE ROWNUM <= 3
Bạn cần một truy vấn con chỉ để sắp xếp các hàng. Nếu bạn muốn ba hàng ngẫu nhiên thay vì ba hàng tốt nhất, chỉ cần viết tên bảng thay vì truy vấn con.
SELECT * FROM exam WHERE ROWNUM <= 3;
Coi chừng! Điều này sẽ không hoạt động khi bạn đang tìm kiếm các hàng có một số lớn hơn một số giá trị (ví dụ:ROWNUM > 2
sẽ không trả về bất kỳ hàng nào.)