Câu hỏi này chủ yếu hỏi tại thời điểm phỏng vấn từ các ứng viên là sinh viên mới ra trường hoặc 1 năm kinh nghiệm. Thậm chí câu hỏi này được hỏi từ tôi đôi khi tôi tham gia vào lĩnh vực phát triển web.
Vì vậy, tôi sẽ chỉ cho bạn một số cách có thể để tìm được mức lương cao thứ 2 hoặc thứ n.
Đối với Exp:Bảng nhân viên (ET)
EID | Tên nhân viên | Mức lương |
---|---|---|
1 | Nhân viên-1 | 20.000 |
2 | Nhân viên-2 | 22.000 |
3 | Nhân viên-3 | 21.000 |
4 | Nhân viên-4 | 19.000 |
5 | Nhân viên-5 | 21.000 |
1:- Cách tìm mức lương cao thứ n không có điều kiện
Trong trường hợp này, bạn có thể sử dụng phương pháp giới hạn và tối đa rất cơ bản của sql
SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT n-1,1
Trong đó n là vị trí bạn đang tìm kiếm
Nếu n =2 truy vấn sẽ trở thành
SELECT DISTINCT(state_id) FROM crm_cities ORDER BY state_id DESC LIMIT 1,1
Sản lượng sẽ là:21.000
2:- Cách tìm tất cả các nhân viên có mức lương cao thứ n trong đó điều kiện là bạn phải tìm được tất cả các nhân viên được trả lương cao thứ 2.
Trong trường hợp này, bạn có thể sử dụng tính năng truy vấn phụ của sql.
SELECT Salary FROM ET WHERE Salary = (SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT n-1,1)
Trong đó n là vị trí bạn đang tìm kiếm
Nếu n =2 truy vấn sẽ trở thành
SELECT Salary FROM ET WHERE Salary = (SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT 1,1)
Sản lượng sẽ là:21,000, 21,000
3:- Cách tìm mức lương cao thứ 2 mà không sử dụng điều kiện LIMIT.
Trong trường hợp này, bạn có thể sử dụng điều kiện NOT IN trong sql
SELECT MAX(Salary) FROM ET WHERE Salary NOT IN (SELECT MAX(Salary) FROM ET)
Sản lượng sẽ là:21.000
4:- Cách tìm mức lương cao thứ 2 mà không sử dụng LIMIT và Sub-Query
Trong trường hợp này, bạn có thể sử dụng phương pháp tự tham gia
SELECT MAX( E1.Salary ) FROM ET E1, ET E2 WHERE E1.Salary < E2.Salary Output will be: 21,000
Hy vọng điều này sẽ giúp bạn tìm được câu trả lời phù hợp với nhu cầu của mình .. 🙂