Trong SQL Server, bạn có thể sử dụng TOP
để giới hạn các hàng được trả về từ một truy vấn trong một tỷ lệ phần trăm nhất định của tập kết quả.
Ví dụ:bạn có thể trả về 10% kết quả hàng đầu hoặc bất kỳ phần trăm nào bạn cần.
Ví dụ 1 - Tập hợp đầy đủ kết quả
Đầu tiên, hãy trả về tập hợp kết quả đầy đủ:
SELECT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Kết quả:
+-----------+--------------------------+ | AlbumId | AlbumName | |-----------+--------------------------| | 1 | Powerslave | | 2 | Powerage | | 3 | Singing Down the Lane | | 4 | Ziltoid the Omniscient | | 5 | Casualties of Cool | | 6 | Epicloud | | 7 | Somewhere in Time | | 8 | Piece of Mind | | 9 | Killers | | 10 | No Prayer for the Dying | | 11 | No Sound Without Silence | | 12 | Big Swing Face | | 13 | Blue Night | | 14 | Eternity | | 15 | Scandinavia | | 16 | Long Lost Suitcase | | 17 | Praise and Blame | | 18 | Along Came Jones | | 19 | All Night Wrong | | 20 | The Sixteen Men of Tain | | 21 | Yo Wassup | | 22 | Busted | +-----------+--------------------------+
Vì vậy, có 22 hàng trong tập hợp kết quả đầy đủ.
Ví dụ 2 - Trả về 10% kết quả hàng đầu
Bây giờ, hãy trả lại 10 phần trăm hàng đầu của những kết quả đó:
SELECT TOP(10) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Kết quả:
+-----------+-----------------------+ | AlbumId | AlbumName | |-----------+-----------------------| | 1 | Powerslave | | 2 | Powerage | | 3 | Singing Down the Lane | +-----------+-----------------------+
Trong trường hợp này, ba hàng được trả về.
Bạn có thể nhận thấy rằng 10 phần trăm của 22 thực sự là 2,2 (không phải 3). Rõ ràng là SQL Server không thể hiển thị 2,2 hàng, vì vậy nó làm tròn kết quả.
Ví dụ 2 - Làm tròn lên Thay vì Xuống
Trong trường hợp bạn đang thắc mắc tại sao SQL Server không làm tròn kết quả giảm bất cứ khi nào phần phân số nhỏ hơn 5, hãy xem ví dụ sau.
SELECT TOP(1) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Kết quả:
+-----------+-------------+ | AlbumId | AlbumName | |-----------+-------------| | 1 | Powerslave | +-----------+-------------+
Hãy nhớ rằng tập hợp kết quả đầy đủ có 22 hàng, vì vậy 1 phần trăm của 22 hàng có nghĩa là 0,22 hàng sẽ được trả về.
Và đây chính là lý do tại sao chúng tôi không muốn làm tròn. Nếu 0,22 hàng được làm tròn xuống, sẽ không có hàng nào được trả lại, do đó không chính xác khiến chúng tôi kết luận rằng không có kết quả phù hợp nào cho truy vấn của chúng tôi.
Ví dụ 3 - Phần trăm 0
Như bạn có thể mong đợi, việc sử dụng 0 phần trăm sẽ trả về 0 hàng.
SELECT TOP(0) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Kết quả:
(0 rows affected)
Ví dụ 4 - Phần trăm tối đa
Bạn chỉ có thể cung cấp các giá trị phần trăm từ 0 đến 100.
Dưới đây là một ví dụ về việc cố gắng sử dụng giá trị cao hơn 100:
SELECT TOP(120) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Kết quả:
Msg 1031, Level 15, State 1, Line 2 Percent values must be between 0 and 100.
Ví dụ 5 - Phần trăm phủ định
Như đã đề cập, giá trị phần trăm phải từ 0 đến 100, vì vậy bạn sẽ gặp lỗi nếu cung cấp phần trăm âm.
SELECT TOP(-10) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Kết quả:
Msg 1031, Level 15, State 1, Line 3 Percent values must be between 0 and 100.