SQL Server: TOP với WITH TIES

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Mệnh đề TOP với WITH TIES dùng để lấy những bản ghi đầu tiên của tập kết quả từ câu lệnh SELECT, ngoài ra mệnh đề còn lấy thêm những bản ghi có giá trị /tập giá trị ở cột/tập cột bằng với giá trị/tập giá trị của bản ghi cuối cùng trong những bản ghi đầu tiên lấy được.

Cú pháp:

SELECT TOP(n) WITH TIES Các_cột FROM Các_bảng_liên_kết [WHERE Điều_kiện] ORDER BY Cột1, Cột2, ...;

, trong đó n là số lượng bản ghi đầu tiên muốn lấy trong tập kết quả.

Lưu ý rằng WITH TIES phải đi cùng với ORDER BY.

Ví dụ:

Giả sử bảng Marks có dữ liệu như sau:

studentid subjectid mark
1 1 24
1 2 24
2 1 25
2 2 25

Thì ta có các tình huống sau đây:

Lấy bản ghi có điểm số bé nhất trong bảng Marks:

SELECT TOP(1) * FROM Marks ORDER BY mark ASC; --Sắp xếp tăng dần theo cột mark => Bản ghi có điểm số nhỏ nhất nằm ở trên cùng

Ta được kết quả là: 

studentid subjectid mark
1 1 24

Lấy tất cả các bản ghi có điểm số bé nhất trong bảng Marks:

SELECT TOP(1) WITH TIES * FROM Marks ORDER BY mark ASC;

Ta được kết quả là: 

studentid subjectid mark
1 1 24
1 2 24

Giải thích: Vì cột mark ở bản ghi cuối cùng trong TOP(1) có giá trị 24 nên WITH TIES có nhiệm vụ lấy thêm những bản ghi có giá trị là 24 ở cột mark, và WITH TIES đã lấy được thêm 1 bản ghi thoả mãn.

Lấy bản ghi có điểm số lớn nhất trong bảng Marks:

SELECT TOP(1) * FROM Marks ORDER BY mark DESC--Sắp xếp giảm dần theo cột mark => Bản ghi có điểm số lớn nhất nằm ở trên cùng

Ta được kết quả là: 

studentid subjectid mark
2 1 25

Lấy tất cả các bản ghi có điểm số lớn nhất trong bảng Marks:

SELECT TOP(1) WITH TIES * FROM Marks ORDER BY mark DESC;

Ta được kết quả là: 

studentid subjectid mark
2 1 25
2 2 25

Bây giờ, ta lấy 3 điểm số nhỏ nhất của bảng Marks:

SELECT TOP(3) * FROM Marks ORDER BY mark ASC;

Ta được kết quả:

studentid subjectid mark
1 1 24
1 2 24
2 1 25

Bạn thấy ở bản ghi thứ 3 điểm số là 25, nhưng còn một bản ghi nữa cũng có điểm số là 25. Nếu bạn muốn lấy thêm những bản ghi có điểm số bằng với điểm số ở bản ghi thứ 3 (bản ghi cuối cùng trong TOP(3) có giá trị 25) ta làm như sau:

SELECT TOP(3) WITH TIES * FROM Marks ORDER BY mark ASC;

Ta được kết quả:

studentid subjectid mark
1 1 24
1 2 24
2 1 25
2 2 25
 
Tương tự, nếu bạn muốn lấy 3 bản ghi đầu tiên có giá trị điểm số lớn nhất và lấy thêm những bản ghi có giá trị điểm số bằng với điểm số thứ 3 trong tập kết quả ta làm như sau:
 

SELECT TOP(3) WITH TIES * FROM Marks ORDER BY mark DESC;

Ta được kết quả:

studentid subjectid mark
2 1 25
2 2 25
1 1 24
1 2 24
» Tiếp: UPDATE
« Trước: TOP với PERCENT
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!