Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Trả về Phần trăm của Tập hợp Kết quả trong SQL Server

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.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. T-sql - xác định xem giá trị có phải là số nguyên hay không

  2. CẬP NHẬT nếu tồn tại CHÈN khác trong SQL Server 2008

  3. Cách bao gồm các kết quả gắn với vị trí cuối cùng khi sử dụng mệnh đề TOP trong SQL Server

  4. KIỂM TRA CONSTRAINT trên nhiều cột

  5. Có "HOẶC" trong điều kiện INNER JOIN có phải là một ý tưởng tồi không?