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

Cách NTILE () hoạt động trong SQL Server

Trong SQL Server, NTILE() chức năng cho phép bạn phân phối các hàng trong một phân vùng có thứ tự thành một số nhóm cụ thể. Các nhóm được đánh số, bắt đầu từ 1. Đối với mỗi hàng, NTILE() trả về số của nhóm mà hàng đó thuộc về.

Bạn chỉ cần cung cấp số lượng nhóm mà bạn mong muốn khi gọi hàm.

Cú pháp

Cú pháp như sau:

 NTILE (integer_expression) HẾT ([] ) 

integer_expression là một biểu thức số nguyên dương xác định số lượng nhóm mà mỗi phân vùng phải được chia. Nó có thể thuộc loại int hoặc bigint .

Là tùy chọn. Nó chia tập hợp kết quả được tạo ra bởi FROM mệnh đề thành các phân vùng mà hàm được áp dụng.

bắt buộc. Nó xác định thứ tự mà NTILE() giá trị được gán cho các hàng trong một phân vùng. Một số nguyên không thể đại diện cho một cột khi được sử dụng trong một chức năng xếp hạng.

Ví dụ 1 - Cách sử dụng cơ bản

Dưới đây là một ví dụ cơ bản cho thấy chức năng này hoạt động như thế nào:

 CHỌN Cầu thủ, Điểm số, NTILE (4) HẾT (ĐẶT HÀNG THEO ĐIỂM MÔ TẢ) Bảng điểm 'NTILE'FROM; 

Kết quả:

 + ---------- + --------- + --------- + | Người chơi | Điểm | NTILE || ---------- + --------- + --------- || Bart | Năm 2010 | 1 || Bỏng | 1270 | 1 || Meg | 10 giờ 30 | 2 || Marge | 990 | 2 || Lisa | 710 | 3 || Ned | 666 | 3 || Apu | 350 | 4 || Homer | 1 | 4 | + ---------- + --------- + --------- + 

Trong trường hợp này, có 8 kết quả và giá trị tôi cung cấp cho NTILE() là 4, vì vậy các giá trị được trải đều trên 4 nhóm.

Ví dụ 2 - Thay đổi Giá trị NTILE

Đây là những gì sẽ xảy ra nếu tôi thay đổi NTILE() giá trị thành 3.

 CHỌN Cầu thủ, Điểm, NTILE (3) HẾT (ĐẶT HÀNG THEO SỐ MÔ TẢ) Bảng điểm 'NTILE'FROM; 

Kết quả:

 + ---------- + --------- + --------- + | Người chơi | Điểm | NTILE || ---------- + --------- + --------- || Bart | Năm 2010 | 1 || Bỏng | 1270 | 1 || Meg | 10 giờ 30 | 1 || Marge | 990 | 2 || Lisa | 710 | 2 || Ned | 666 | 2 || Apu | 350 | 3 || Homer | 1 | 3 | + ---------- + --------- + --------- + 

Kết quả được phân bổ cho 3 nhóm. Như bạn có thể mong đợi, nhóm cuối cùng chỉ có 2 hàng (so với 3 hàng của các nhóm khác).

Ví dụ 3 - Chuyển đổi Thứ tự

Việc chuyển đổi thứ tự giữa tăng dần và giảm dần thường sẽ dẫn đến NTILE() giá trị đang được áp dụng cho các hàng khác nhau.

 CHỌN cầu thủ, điểm số, NTILE (4) HƠN (ĐẶT HÀNG THEO ĐIỂM MÔ TẢ) 'NTILE giảm dần', NTILE (4) HƠN (ĐẶT HÀNG THEO ĐIỂM ASC) 'NTILE Tăng dần'FROM ScoreboardORDER BY Score DESC; 

Kết quả:

 + ---------- + --------- + -------------------- + ---- --------------- + | Người chơi | Điểm | NTILE giảm dần | NTILE Tăng dần || ---------- + --------- + -------------------- + ---- --------------- || Bart | Năm 2010 | 1 | 4 || Bỏng | 1270 | 1 | 4 || Meg | 10 giờ 30 | 2 | 3 || Marge | 990 | 2 | 3 || Lisa | 710 | 3 | 2 || Ned | 666 | 3 | 2 || Apu | 350 | 4 | 1 || Homer | 1 | 4 | 1 | + ---------- + --------- + -------------------- + ----- -------------- + 

Tuy nhiên, điều này sẽ phụ thuộc vào số lượng hàng trong tập kết quả so với số lượng NTILE. Rõ ràng, nếu NTILE() giá trị là 1, sau đó sẽ không có sự khác biệt.

 CHỌN cầu thủ, điểm số, NTILE (1) HƠN (ĐẶT HÀNG THEO SỐ MÔ TẢ) 'NTILE giảm dần', NTILE (1) HƠN (ĐẶT HÀNG THEO ĐIỂM ASC) 'NTILE Tăng dần'FROM Bảng ghi điểm THEO SỐ MÔ TẢ; 

Kết quả:

 + ---------- + --------- + -------------------- + ---- --------------- + | Người chơi | Điểm | NTILE giảm dần | NTILE Tăng dần || ---------- + --------- + -------------------- + ---- --------------- || Bart | Năm 2010 | 1 | 1 || Bỏng | 1270 | 1 | 1 || Meg | 10 giờ 30 | 1 | 1 || Marge | 990 | 1 | 1 || Lisa | 710 | 1 | 1 || Ned | 666 | 1 | 1 || Apu | 350 | 1 | 1 || Homer | 1 | 1 | 1 | + ---------- + --------- + -------------------- + ----- -------------- + 

Điều tương tự sẽ xảy ra nếu tập kết quả chỉ chứa một hàng, bất kể NTILE() giá trị:

 CHỌN cầu thủ, điểm số, NTILE (4) HƠN (ĐẶT HÀNG THEO ĐIỂM MÔ TẢ) 'NTILE giảm dần', NTILE (4) HƠN (ĐẶT HÀNG THEO ĐIỂM ASC) 'NTILE Tăng dần'Bảng điểm FROMWHERE Điểm> 2000ORDER BY Score DESC;  

Kết quả:

 + ---------- + --------- + -------------------- + ---- --------------- + | Người chơi | Điểm | NTILE giảm dần | NTILE Tăng dần || ---------- + --------- + -------------------- + ---- --------------- || Bart | Năm 2010 | 1 | 1 | + ---------- + --------- + -------------------- + ----- -------------- + 

Ví dụ 4 - Phân vùng

Bạn có thể sử dụng PARTITION BY mệnh đề chia kết quả thành các phân vùng. Khi bạn làm điều này, NTILE() được áp dụng cho mỗi phân vùng.

Ví dụ:

 CHỌN Tên đội, Cầu thủ, Điểm số, NTILE (2) HẾT (PHẦN THEO Tên Đội ĐẶT HÀNG THEO Điểm ASC) 'Bảng điểm NTILE'FROM sINNER THAM GIA Đội tON t.TeamId =s.TeamId; 

Kết quả:

 + ------------ + ---------- + --------- + ------------ ------- + | TeamName | Người chơi | Điểm | NTILE || ------------ + ---------- + --------- + ------------- ------ || Mongrels | Apu | 350 | 1 || Mongrels | Ned | 666 | 1 || Mongrels | Meg | 10 giờ 30 | 2 || Mongrels | Bỏng | 1270 | 2 || Simpsons | Homer | 1 | 1 || Simpsons | Lisa | 710 | 1 || Simpsons | Marge | 990 | 2 || Simpsons | Bart | Năm 2010 | 2 | + ------------ + ---------- + --------- + ------------- ------ + 

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng SQL Server làm hàng đợi DB với nhiều máy khách

  2. SQL Server pivot so với nhiều tham gia

  3. Giống như Operator trong Entity Framework?

  4. Nhận tối thiểu hai giá trị trong SQL

  5. Bảng tạm thời của Sql Server biến mất