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

Truy vấn SQL để tìm mức lương cao nhất thứ N từ bảng lương

Bạn có thể sử dụng Biểu thức Bảng Chung (CTE) để tìm ra câu trả lời.

Giả sử bạn có các mức lương sau trong bảng Mức lương:

 EmployeeID  Salary
--------------------
     10101   50,000
     90140   35,000
     90151   72,000
     18010   39,000
     92389   80,000

Chúng tôi sẽ sử dụng:

DECLARE @N int
SET @N = 3  -- Change the value here to pick a different salary rank

SELECT Salary
FROM (
    SELECT row_number() OVER (ORDER BY Salary DESC) as SalaryRank, Salary
    FROM Salaries
) as SalaryCTE
WHERE SalaryRank = @N

Thao tác này sẽ tạo một số hàng cho mỗi hàng sau khi nó đã được sắp xếp theo Mức lương theo thứ tự giảm dần, sau đó truy xuất hàng thứ ba (chứa bản ghi cao thứ ba).

  • SQL Fiddle

Đối với những bạn không muốn có CTE (hoặc bị mắc kẹt trong SQL 2000):

[ Lưu ý :điều này hoạt động kém hơn đáng kể so với ví dụ trên; chạy chúng song song với một kế hoạch đặc biệt cho thấy chi phí truy vấn là 36% cho CTE và 64% cho truy vấn phụ]:

SELECT TOP 1 Salary
FROM 
(
    SELECT TOP N Salary
    FROM Salaries
    ORDER BY Salary DESC
) SalarySubquery
ORDER BY Salary ASC

trong đó N do bạn xác định.

SalarySubquery là bí danh tôi đã đặt cho truy vấn con hoặc truy vấn nằm trong dấu ngoặc đơn.

Những gì truy vấn con làm là nó chọn N mức lương cao nhất (chúng tôi sẽ nói 3 trong trường hợp này), và đặt hàng họ theo mức lương cao nhất.

Nếu chúng ta muốn xem mức lương cao thứ ba, truy vấn con sẽ trả về:

 Salary
-----------
80,000
72,000
50,000

Sau đó, truy vấn bên ngoài sẽ chọn mức lương đầu tiên từ truy vấn con, ngoại trừ lần này chúng tôi sắp xếp nó tăng dần, sắp xếp từ nhỏ nhất đến lớn nhất, vì vậy 50.000 sẽ là bản ghi đầu tiên được sắp xếp tăng dần.

Như bạn có thể thấy, 50.000 thực sự là mức lương cao thứ ba trong ví dụ này.



  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ính toán giá trị bằng cách sử dụng giá trị trước đó của một hàng trong T-SQL

  2. Làm cách nào để tìm kiếm một chuỗi trong cơ sở dữ liệu SQL Server?

  3. Tiện ích thay đổi mật khẩu SQL khéo léo để đặt lại mật khẩu SQL

  4. Chọn nhóm hàng phù hợp với tất cả các mục trong danh sách

  5. Trả về danh sách các lược đồ phân vùng trong SQL Server (T-SQL)