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

Mức lương cao thứ n

Câu hỏi phổ biến và quan trọng nhất được hỏi trong các cuộc phỏng vấn rằng làm thế nào chúng ta có thể tìm thấy mức lương cao nhất thứ N trong bảng (mức lương cao nhất thứ 2, mức lương cao nhất thứ 3 hoặc mức lương cao nhất thứ N), trong đó N có thể là 2, 3, 4, 5 hoặc bất cứ thứ gì.

Mỗi lập trình viên đều biết cách dễ nhất để tìm được mức lương cao nhất là sử dụng SQL (Ngôn ngữ truy vấn có cấu trúc) trong một bảng.

Bất cứ khi nào người phỏng vấn hỏi bạn một câu hỏi về 2 mức lương cao nhất, 4 mức lương cao nhất, v.v. Để giải quyết câu hỏi này, chúng ta nên biết về một số khái niệm quan trọng như truy vấn con, hàm được sử dụng như row_num (), Rank Rank () , v.v.

Bài viết này sẽ cho bạn biết các cách khác nhau để tìm được N Mức lương cao nhất.

Hãy xem xét các bảng hiện có có các bản ghi sau:

Bảng:Nhân viên

EMPLOYEEID FIRST_NAME LAST_NAME TIỀN LƯƠNG THÀNH PHỐ KHOA MANAGERID
1001 VAIBHAVI MISHRA 65500 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60000 NOIDA C # 5
1003 NIKHIL VANI 50500 JAIPUR FMW 2
2001 PRACHI SHARMA 55500 ĐIỀU CHỈNH ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50000 MUMBAI C # 5
3001 PRANOTI CHIA SẺ 55500 PUNE JAVA 3
3002 ANUJA DÂY 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH MỤC TIÊU 60500 MUMBAI KIỂM TRA 4
4002 ASHWINI TÚI XÁCH 54500 NOIDA JAVA 3
4003 RUCHIKA AGARWAL 60000 DELHI ORACLE 1
5001 ARCHIT SHARMA 55500 DELHI KIỂM TRA 4

N hững mức lương cao nhất sử dụng truy vấn con tương quan

Truy vấn con có tương quan là một loại truy vấn con đặc biệt, trong đó truy vấn con phụ thuộc vào truy vấn chính và được thực thi cho mọi hàng do truy vấn chính trả về.

Cú pháp:

SELECT salary from employees e1WHERE N-1 = (SELECT COUNT (DISINCT salary) FROM employees e2 WHERE e2.salary > e1.salary)

Trong đó N có thể được thay thế bằng các số 23 hoặc 4.

Ví dụ 1: Viết truy vấn để tìm 4 mức lương cao nhất:

SELECT employeeid, salary from employees e1WHERE 3 = (SELECT COUNT (DISTINCT salary) FROM employees e2 WHERE e2.salary > e1.salary)

Trong đó N =4, N -1:4 -1 =3.

4 mức lương cao nhất bảng

Đầu ra:

Employeeid Lương
3003 58500

Giải thích:

Từ khóa khác biệt ở đó để xử lý các mức lương trùng lặp trong bảng. Để tìm kiếm N mức lương cao nhất, chúng tôi chỉ xem xét mức lương không trùng lặp. Mức lương cao nhất có nghĩa là không có mức lương nào cao hơn nó. Mức lương cao thứ hai có nghĩa là chỉ một mức lương lớn hơn nó. Mức lương cao thứ ba có nghĩa là chỉ có hai mức lương cao hơn mức lương thứ ba, tương tự mức lương cao nhất thứ N có nghĩa là mức lương N-1 lớn hơn mức đó.

Mức lương cao thứ tư là 58500 của id nhân viên 3003.

Ví dụ 2:Viết truy vấn để tìm 3 mức lương cao nhất:

SELECT employeeid, salary from employees e1WHERE 3 - 1 = (SELECT COUNT (DISTINCT salary) FROM employees e2 WHERE e2.salary > e1.salary)

Trong đó N =3, N -1:3 -1 =2.

2 mức lương cao nhất bảng

Đầu ra:

Employeeid Lương
1002 60000
4003 60000

Mức lương cao thứ hai là 58500 của hai id nhân viên 1002 và id nhân viên 4003.

Ví dụ 3:Viết truy vấn để tìm 5 mức lương cao nhất:

SELECT employeeid, salary from employees e1WHERE 6 - 1 = (SELECT COUNT (DISTINCT salary) FROM employees e2 WHERE e2.salary > e1.salary)

Trong đó N =6, N -1:6 -1 =5.

5 mức lương cao nhất bảng

Đầu ra:

Employeeid Lương
4002 54500

Mức lương cao thứ năm là 54500 của id nhân viên là 4002.

N Mức lương cao nhất bằng cách sử dụng từ khóa LIMIT

Cú pháp:

SELECT salary FROM employees ORDER BY salary desc LIMIT N-1, 1;

Ví dụ 1: Viết truy vấn để tìm 2 mức lương cao nhất.

SELECT employeeid, salary FROM employees ORDER BY salary desc LIMIT 1, 1;

Đầu ra:

Employeeid Lương
2002 65500

Giới hạn 1, 1 trong truy vấn cho biết mức lương cao nhất sẽ được hiển thị.

Nếu bạn viết 1, 2 đầu ra sẽ như thế này

Employeeid Lương
2002 65500
4001 60500

N Mức lương cao nhất khi sử dụng từ khóa TOP

Tình huống là tính N lương nhân viên cao nhất từ ​​bảng nhân viên. Các bước như sau:

1. Bước đầu tiên là tìm kiếm mức lương duy nhất TOP của nhân viên từ bảng.
2. Bước tiếp theo là tính toán mức lương tối thiểu trong số tất cả các mức lương thu được từ bước đầu tiên. Đến bước này, chúng tôi nhận được N mức lương cao nhất.
3. Từ kết quả của các bước trên, xác định chi tiết người lao động có mức lương tối thiểu.

Ví dụ 1:

SELECT * FROM employees WHERE salary = (SELECT MIN(salary) FROM employees WHERE salary IN(SELECT DISTINCT TOP N salary from employees ORDER BY salary DESC ));

Câu lệnh SQL trên được sử dụng để tìm thông tin chi tiết về những nhân viên có mức lương Cao nhất.

Hãy xem giải thích ngắn gọn về câu lệnh SQL ở trên:

Coi N =4.

Bất cứ khi nào bất kỳ truy vấn SQL nào bao gồm một truy vấn phụ, hãy nhớ rằng truy vấn bên trong sẽ thực thi trước sau đó truy vấn bên ngoài sẽ được thực thi.

Kết quả sau sẽ được tạo ra bởi truy vấn "CHỌN TIỀN LỆNH ĐẦU N từ nhân viên ĐẶT HÀNG THEO MÔ TẢ lương", kết quả này sẽ tạo ra kết quả sau.

Mức lương
65500
60500
60000
58500

Truy vấn bên ngoài tiếp theo là:"CHỌN MIN (lương) TỪ nhân viên TẠI ĐÂU lương IN (kết quả của truy vấn SQL trước đó.

Mức lương
58500

Từ kết quả trên, xác minh rằng mức lương yêu cầu cao thứ tư là 58500.

Cuối cùng, truy vấn chính là SELECT * FROM nhân viên WHERE lương =kết quả của truy vấn SQL trước đó. Đầu ra của truy vấn này sẽ là kết quả của những nhân viên có mức lương cao thứ tư.

FIRST_NAME TIỀN LƯƠNG
DEEPAM 58500

Ví dụ 2:

SELECT * FROM employees WHERE salary = (SELECT MIN(salary) FROM employees WHERE salary IN(SELECT DISTINCT TOP N salary from employees ORDER BY salary DESC ));

Câu lệnh SQL trên được sử dụng để tìm thông tin chi tiết về những nhân viên có mức lương cao nhất N.

Hãy xem giải thích ngắn gọn về câu lệnh SQL ở trên:

Coi N =5.

Bất cứ khi nào bất kỳ truy vấn SQL nào bao gồm một truy vấn phụ, hãy nhớ rằng truy vấn bên trong sẽ thực thi trước sau đó truy vấn bên ngoài sẽ được thực thi.

Kết quả sau sẽ được tạo ra bởi truy vấn "CHỌN TIỀN LỆNH ĐẦU N từ nhân viên ĐẶT HÀNG THEO MÔ TẢ lương", kết quả này sẽ tạo ra kết quả sau.

Mức lương
65500
60500
60000
58500
55500

Truy vấn bên ngoài tiếp theo là:"CHỌN MIN (lương) TỪ nhân viên TẠI ĐÂU lương IN (kết quả của truy vấn SQL trước đó.

Mức lương
55500

Từ kết quả trên, xác minh rằng mức lương yêu cầu cao thứ năm là 55500.

Cuối cùng, truy vấn chính là SELECT * FROM nhân viên WHERE lương =kết quả của truy vấn SQL trước đó. Đầu ra của truy vấn này sẽ là kết quả của những nhân viên có mức lương cao thứ năm.

FIRST_NAME TIỀN LƯƠNG
PRACHI 55500

Mức lương cao nhất thứ N khi sử dụng hàm Row_Num ()

Ví dụ:

SELECT MIN(salary) FROM(SELECT DISTINCT salary FROM employees ORDER  BY salary DESC) WHERE rownum < 3;
  • Để tính mức lương cao thứ ba, hãy sử dụng rownum <4
  • Để tính mức lương cao thứ hai, hãy sử dụng rownum <3

Đầu ra:

MIN (lương
60500

Hãy xem cách truy vấn hoạt động:

Bước 1: Truy vấn bao gồm truy vấn con nghĩa là truy vấn bên trong và truy vấn bên ngoài. Tất cả chúng ta đều biết khi truy vấn con được sử dụng trong truy vấn, truy vấn bên trong được thực thi đầu tiên

Đầu tiên, truy vấn bên trong sẽ được thực thi sau đó các truy vấn bên ngoài sẽ được thực thi dựa trên kết quả do truy vấn bên trong tạo ra:

Truy vấn bên trong:

SELECT MIN(salary) FROM(SELECT DISTINCT salary FROM employees ORDER  BY salary DESC) WHERE rownum < 3;

Đầu ra của truy vấn bên trong:

Mức lương
65500
60500
60000
58500
55500
54500
50500
50000

Khi chúng tôi sử dụng một từ khóa riêng biệt trong truy vấn, mức lương trùng lặp sẽ bị loại bỏ. Mức lương duy nhất sẽ được hiển thị do kết quả của truy vấn bên trong.

Bước 2: Khi máy chủ được thực hiện với truy vấn bên trong, chúng tôi đang thực hiện truy vấn bên ngoài của truy vấn lồng vào kết quả mà chúng tôi thu được từ truy vấn bên trong

SELECT MIN(salary) FROM(SELECT DISTINCT salary FROM employees ORDER  BY salary DESC) WHERE rownum < 3;

SELECT MIN (lương) FROM (đầu ra truy vấn bên trong):chọn mức lương tối thiểu từ đầu ra truy vấn bên trong, là 50000 và 50000 không phải là mức lương cao thứ hai, vì chúng tôi đã sử dụng rownum <3, điều này sẽ cho số các hàng từ trên cùng nhỏ hơn 3 nghĩa là chỉ có 2.

Đầu ra của WHERE rownum <3:

Mức lương
65500
60500

Bước 3: Phần cuối cùng của truy vấn, là SELECT MIN (lương) từ (đầu ra của WHERE rownum <3):

Kết quả cuối cùng của truy vấn:

Mức lương
60500

60500 là mức lương cao thứ hai trong bảng của nhân viên.

Mức lương cao nhất thứ N sử dụng hàm Rank Rank ()

Ví dụ:

SELECT * FROM(SELECT First_Name, salary, dense_rank()      OVER(ORDER BY salary DESC) rank FROM employees) WHERE rank =&num;

- Để tính mức lương cao thứ ba, hãy sử dụng num =3

- Để tính mức lương cao thứ hai, hãy sử dụng num =2

Chúng tôi sẽ đi cho num =2.

Kết quả cuối cùng:

First_Name Lương Xếp hạng
Rajesh 60500 2

O đầu ra của truy vấn bên trong:

SELECT(First_Name, Salary, dense_rank() OVER(ORDER BY salary DESC) Rank FROM employees

Hàm Dense_rank () tính Xếp hạng của mỗi hàng trong một nhóm thứ tự các hàng theo thứ tự tăng dần và trả về Xếp hạng dưới dạng một số. Xếp hạng bắt đầu từ 1 và cứ tiếp tục như vậy.

Trong trường hợp hai hoặc nhiều hơn hai hàng có cùng mức lương, nó sẽ gán một thứ hạng bằng nhau cho tất cả các hàng.

Đầu ra của truy vấn bên trong:

First_name Lương Xếp hạng
VAIBHAVI 65500 1
BHAVESH 65500 1
RAJESH 60500 2
VAIBHAV 60000 3
RUCHIKA 60000 3
DEEPAM 58500 4
PRACHI 55500 5
PRANOTI 55500 5
ARCHIT 55500 5
ASHWINI 54500 6
NIKHIL 50500 7
ANUJA 50500 7
RUCHIKA 50000 8

Trong đầu ra, chúng ta có thể thấy cùng một thứ hạng để trùng lặp mức lương.

Bước 2: Khi máy chủ được thực hiện với truy vấn bên trong, chúng tôi đang thực hiện truy vấn bên ngoài của truy vấn lồng vào kết quả mà chúng tôi thu được từ truy vấn bên trong

SELECT * FROM(SELECT(First_Name, Salary, dense_rank() OVER(ORDER BY salary DESC) rank FROM employees) WHERE rank = &num;

Chọn * từ sẽ chọn tất cả các hàng không có mức lương cao thứ hai vì chúng tôi đã sử dụng Xếp hạng trong đó num =2 sẽ cung cấp các hàng phù hợp theo giá trị mà người dùng đã nhập cho num.

Khi chúng tôi sử dụng num =2, đầu ra sẽ là

First_name Lương Xếp hạng
RAJESH 60500 2
  • Để tìm mức lương thứ ba, num =3,
  • Để tìm mức lương thứ tư, num =4, v.v.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các phương pháp tiếp cận bảo mật trong mô hình hóa dữ liệu. Phần 4

  2. CHÈN SQL cho người mới bắt đầu

  3. Chuyển đổi dữ liệu ODBC trong CloverDX

  4. Mô hình dữ liệu cho ứng dụng thời tiết

  5. Tham gia với chúng tôi ở Las Vegas để có SQLintersection và tiết kiệm $ 100