Làm cách nào để có mức lương cao nhất trong MySQL?

Trong bài viết này, chúng tôi sẽ giải thích cách viết truy vấn MySQL để tìm mức lương cao nhất từ ​​mỗi bộ phận từ bảng nhân viên

đọc thêm. Tìm Lương Nhân Viên Cao Thứ N Từ Bảng Nhân Viên Trong MySql

Tìm mức lương cao nhất từ ​​mỗi bộ phận

Hãy tạo một ví dụ đơn giản về bảng nhân viên. Chúng tôi sẽ điền vào bảng này với id, tên, lương và bộ phận của nhân viên

SELECT * FROM employees;

idnamesalarybộ phận1Tom4000Công nghệ2Sam6000Bán hàng3Bob3000Công nghệ4Alen8000Công nghệ5Jack12000Tiếp thị6Charlie8000Nhân sự7Harry6000Tiếp thị8Jacob4000Nhân sự

Câu lệnh MySQL sau tìm mức lương tối đa từ mỗi bộ phận, bạn sẽ được yêu cầu sử dụng mệnh đề GROUP BY với truy vấn SELECT

Viết truy vấn MySQL để tìm mức lương cao thứ hai từ bảng nhân viên. Có nhiều cách để nhận được mức lương cao thứ hai dựa trên cơ sở dữ liệu bạn đang sử dụng vì cơ sở dữ liệu khác nhau cung cấp các tính năng khác nhau có thể được sử dụng để tìm mức lương tối đa thứ hai từ bảng nhân viên

đọc thêm. Tìm Lương Nhân Viên Cao Thứ N Từ Bảng Nhân Viên

Truy vấn MySQL để tìm mức lương cao thứ hai

Xem xét bảng nhân viên có các bản ghi sau -

SELECT * FROM employees;

idnamesalarydepartment1Tom4000Technology2Sam6000Sales3Bob3000Technology4Alen8000Technology5Jack12000Marketing

Trong phần này, chúng ta sẽ tìm hiểu cách chúng ta có thể chọn bản ghi cao thứ n trong bảng cơ sở dữ liệu với sự trợ giúp của các kỹ thuật khác nhau

Chúng ta có thể lấy bản ghi tối đa (cao nhất) hoặc tối thiểu (thấp nhất) trong bảng cơ sở dữ liệu rất dễ dàng bằng cách sử dụng hàm MAX() hoặc MIN(). Nhưng giả sử chúng ta muốn lấy bản ghi cao thứ n từ bảng (ví dụ: lấy mức lương đắt thứ hai từ bảng nhân viên). Trong trường hợp đó, không có chức năng nào để tìm nhanh, điều này gây phức tạp

Bằng cách thực hiện các bước sau, chúng ta có thể chọn bản ghi cao thứ n trong bảng cơ sở dữ liệu MySQL

1. Bước đầu tiên là sắp xếp cột mong muốn theo thứ tự tăng dần để có được n bản ghi cao nhất, đây là bản ghi cuối cùng trong kết quả đầu ra. Xem truy vấn bên dưới

2. Sau đó, chúng ta cần sắp xếp kết quả đầu ra theo thứ tự giảm dần và lấy bản ghi đầu tiên

Truy vấn trên cũng có thể được viết lại bằng cách sử dụng mệnh đề LIMIT ràng buộc số lượng hàng trong kết quả đầu ra như sau

Truy vấn này sẽ trả về hàng đầu tiên sau n-1 hàng sẽ là bản ghi cao thứ n

Ví dụ

Hãy cho chúng tôi hiểu cách lấy bản ghi cao thứ n từ bảng với sự trợ giúp của một ví dụ. Đầu tiên, chúng ta sẽ tạo bảng Nhân viên bằng truy vấn bên dưới

Tiếp theo, chèn bản ghi bằng truy vấn bên dưới

Thực hiện câu lệnh SELECT để xác minh bản ghi

Làm cách nào để có mức lương cao nhất trong MySQL?

Giả sử chúng ta muốn lấy mức lương cao thứ hai của một nhân viên (n=2) trong bảng Nhân viên;

Chúng ta sẽ thấy đầu ra như sau

Làm cách nào để có mức lương cao nhất trong MySQL?

Giả sử chúng ta muốn lấy mức lương cao thứ ba của một nhân viên (n=3) trong bảng Nhân viên;

Chúng ta sẽ thấy đầu ra như sau

Làm cách nào để có mức lương cao nhất trong MySQL?

Nhận bản ghi cao thứ n bằng truy vấn phụ

Chúng tôi cũng có thể nhận được bản ghi cao thứ n với sự trợ giúp của truy vấn phụ, phụ thuộc vào truy vấn chính và được xử lý cho mọi bản ghi được trả về bởi truy vấn chính. Kỹ thuật này hiếm khi được sử dụng vì hiệu suất/tốc độ thực thi chậm

Xem truy vấn bên dưới trả về mức lương cao thứ hai từ bảng nhân viên bằng cách sử dụng truy vấn con

Một trong những câu hỏi phỏng vấn SQL phổ biến nhất là tìm mức lương cao thứ N của nhân viên, trong đó N có thể là 2, 3, 4 hoặc bất kỳ thứ gì e. g. tìm mức lương cao thứ hai trong SQL. Đôi khi câu hỏi này cũng bị xoắn như để tìm mức lương tối thiểu thứ n trong SQL. Vì nhiều Lập trình viên chỉ biết cách dễ dàng để giải quyết vấn đề này e. g. bằng cách sử dụng mệnh đề SQL IN, vốn không mở rộng tốt, họ gặp khó khăn khi viết truy vấn SQL khi Người phỏng vấn liên tục hỏi về thứ hạng cao thứ 4, thứ 5, v.v. Để giải quyết vấn đề này một cách hiệu quả, bạn cần biết về một số khái niệm chính như truy vấn con tương quan, các hàm cửa sổ như ROW_NUMER() , RANK(), and DENSE_RANK(), etc. Once you know the generic logic to solve this problem, you can tackle all those variations by yourself.

Trong bài viết này, tôi sẽ chỉ cho bạn 4 cách để giải quyết vấn đề này. g. bằng cách sử dụng truy vấn con tương quan, sử dụng ROW_NUMBER() , sử dụng TOP trong SQL SERVER và sử dụng từ khóa LIMIT trong MySQL.

Nhân tiện, nếu bạn chưa quen với Microsoft SQL Server và T-SQL thì tôi cũng khuyên bạn nên tham gia một khóa học toàn diện để tìm hiểu các nguyên tắc cơ bản của SQL Server và cách làm việc với T-SQL. Nếu bạn cần một đề xuất thì tôi khuyên bạn nên tham gia khóa học trực tuyến Microsoft SQL for Beginners của Brewster Knowlton trên Udemy. Đó là một khóa học tuyệt vời để bắt đầu với các truy vấn T-SQL và SQL trong SQL Server.









Bảng và dữ liệu mẫu cho Bài toán về mức lương cao nhất thứ N

Trước khi giải quyết vấn đề này, chúng ta cần một số dữ liệu mẫu để hình dung vấn đề rõ hơn, hãy tạo một bảng nhân viên với một số dữ liệu.

Sử dụng truy vấn bên dưới để tạo bảng và xây dựng lược đồ.

______2


Mức lương cao thứ n sử dụng truy vấn phụ tương quan

Làm cách nào để có mức lương cao nhất trong MySQL?

Một trong những cách phổ biến nhất để giải quyết vấn đề tìm mức lương tối đa thứ N từ bảng Nhân viên là sử dụng truy vấn con tương quan. Đây 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à thực thi cho mọi hàng được truy vấn chính trả về. Nó chậm nhưng nó có thể giải quyết các vấn đề khó giải quyết bằng cách khác. Hãy xem truy vấn SQL để tìm mức lương cao thứ N bằng cách sử dụng truy vấn con Tương quan.

Truy vấn SQL.


SELECT name, salary 
FROM #Employee e1
WHERE N-1 = (SELECT COUNT(DISTINCT salary) FROM #Employee e2
WHERE e2.salary > e1.salary)

đối với mức tối đa thứ 2, bạn có thể thay thế N bằng 2, và đối với mức tối đa thứ 3, hãy thay thế N bằng 3, đây là kết quả.

Mức lương cao thứ 2.


SELECT name, salary 
FROM #Employee e1
WHERE N-1 = (SELECT COUNT(DISTINCT salary) FROM #Employee e2
WHERE e2.salary > e1.salary)SELECT name, salary 
FROM #Employee e1
WHERE 2-1 = (SELECT COUNT(DISTINCT salary) FROM #Employee e2
WHERE e2.salary > e1.salary)

Result:
name salary
Peter 5000


Mức lương cao thứ 3.


SELECT name, salary 
FROM #Employee e1
WHERE 3-1 = (SELECT COUNT(DISTINCT salary) FROM #Employee e2
WHERE e2.salary > e1.salary)

Result:
name salary
John 4000

Giải thích.

từ khóa riêng biệt để xử lý các mức lương trùng lặp trong bảng. Để tìm mức lương cao thứ N, chúng tôi chỉ xem xét mức lương duy nhất. Cao nhất là không có lương nào cao hơn, Cao nhì là chỉ cao hơn nó 1 lương, Cao thứ 3 là cao hơn 2 lương, tương tự N-cao nhất là N-1 lương cao hơn nó.

Ưu điểm.
1) Giải pháp chung hoạt động trong tất cả các cơ sở dữ liệu bao gồm Oracle, MySQL, SQL SERVER và PostgreSQL.

Nhược điểm.
1) Chậm, vì truy vấn bên trong sẽ chạy cho mọi hàng được xử lý bởi truy vấn bên ngoài.

Xem cuốn sách Câu đố và câu trả lời về SQL để biết thêm về các truy vấn SQL như vậy nhằm thực hành và cải thiện kỹ năng truy vấn SQL của bạn.

Làm cách nào để có mức lương cao nhất trong MySQL?




Mức lương cao thứ n trong SQL SERVER sử dụng từ khóa TOP

Bạn có thể sử dụng từ khóa TOP để tìm mức lương cao thứ N trong SQL SERVER. Điều này cũng nhanh hơn giải pháp trước đó vì ở đây chúng tôi đang tính mức lương tối đa thứ N mà không có truy vấn con.

______6

Giải thích.

Theo mặc định, mệnh đề ORDER BY in các hàng theo thứ tự tăng dần, vì chúng tôi cần mức lương cao nhất ở trên cùng, chúng tôi đã sử dụng ORDER BY DESC, sẽ hiển thị mức lương theo thứ tự giảm dần. Một lần nữa DISTINCT được sử dụng để loại bỏ các bản sao. Sau đó, truy vấn bên ngoài sẽ chọn mức lương cao nhất, đây sẽ là mức lương cao thứ N của bạn.

Và, nếu bạn thích sách và chỉ tìm hiểu những truy vấn này từ cuộc phỏng vấn thì tôi khuyên bạn trước tiên nên đọc một cuốn sách hay về SQL như Head First SQL. Nó sẽ giúp bạn xây dựng nền tảng của bạn.

Mức lương cao thứ 3 trong SQL SERVER

SELECT TOP 1 salary
FROM (
SELECT DISTINCT TOP 3 salary
FROM #Employee
ORDER BY salary DESC
) AS temp
ORDER BY salary

Result:
salary
4000


Đây là một ví dụ khác mà chúng tôi đã sử dụng từ khóa TOP để tìm mức lương cao thứ hai .


Mức lương tối đa thứ n trong MySQL khi sử dụng LIMIT từ khóa

Tương tự như TOP, MySQL cũng hỗ trợ từ khóa LIMIT, cung cấp khả năng phân trang. Bạn có thể tìm mức lương cao thứ n trong MySQL mà không cần sử dụng subquery như hình bên dưới.

______8

Mức lương cao thứ 2 trong MySQL mà không cần truy vấn con.

______9
Mức lương cao thứ 3 trong MySQL khi sử dụng mệnh đề LIMIT.

SELECT * FROM employees;
0
Mức lương cao thứ n trong MySQL khi sử dụng mệnh đề LIMIT.

______11
Giải thích.
Lợi ích của phương pháp này là nó nhanh hơn phương pháp truy vấn tương quan nhưng phụ thuộc vào nhà cung cấp. Giải pháp này sẽ chỉ hoạt động trong cơ sở dữ liệu MySQL.



Mức lương cao thứ n trong Oracle khi sử dụng hàm ROW_NUMBER()


SELECT name, salary 
FROM #Employee e1
WHERE N-1 = (SELECT COUNT(DISTINCT salary) FROM #Employee e2
WHERE e2.salary > e1.salary)
0

Đây là mức lương cao thứ 2 trong Oracle khi sử dụng hàm cửa sổ ROW_NUMBER().

______31
và đây là mức lương cao thứ 3 trong Oracle.

SELECT name, salary 
FROM #Employee e1
WHERE N-1 = (SELECT COUNT(DISTINCT salary) FROM #Employee e2
WHERE e2.salary > e1.salary)
2

Bởi đoạn mã trên có vấn đề. Nó không xử lý tiền lương trùng lặp đúng cách. Ví dụ: trong bảng của chúng tôi, chúng tôi có hai nhân viên với mức lương 3000, đó là mức lương cao thứ 4 của chúng tôi, nhưng đoạn mã trên sẽ in cùng một mức lương, mặc dù nhân viên khác nhau cho cả mức tối đa thứ 4 và thứ 5 như hiển thị bên dưới.

______33
Trong Oracle, bạn cũng có thể sử dụng các câu lệnh SQL để xây dựng lược đồ và chạy SQL mẫu.

Bạn cũng có thể làm điều tương tự bằng cách sử dụng chức năng cửa sổ   RANK() trong Oracle, nhưng đó là chuyện của một ngày khác. Nhiêu đây là quá đủ để trả lời câu hỏi phỏng vấn SQL, mức lương cao thứ n của một nhân viên trong Oracle.


Đó là tất cả về cách tìm mức lương cao thứ n trong SQL. Cách dễ nhất để tìm mức lương tối đa/tối thiểu thứ n là sử dụng truy vấn con tương quan, nhưng đó không phải là cách nhanh nhất. Những cách tốt hơn là phụ thuộc vào cơ sở dữ liệu e. g. bạn khiến từ khóa TOP trong SQL SERVER, từ khóa LIMIT trong MySQL và hàm cửa sổ ROW_NUMBER() trong Oracle để tính mức lương cao thứ n. Cách truy vấn con bình thường là tốt cho mức tối đa thứ hai nhưng sau đó, nó trở nên thực sự lồng nhau và lộn xộn.



Các câu hỏi phỏng vấn và truy vấn SQL có liên quan

  • 21 Các câu hỏi SQL thường gặp trong các cuộc phỏng vấn (đọc tại đây)
  • Sự khác biệt giữa Chế độ xem và Chế độ xem được vật chất hóa trong cơ sở dữ liệu Oracle là gì?
  • Một sự khác biệt giữa UNION và UNION ALL trong SQL?
  • Sự khác biệt giữa LEFT và RIGHT OUTER JOIN trong SQL?
  • Một sự khác biệt giữa self và equijoin trong SQL?
  • Sự khác nhau giữa mệnh đề WHERE và HAVING trong SQL?
  • Làm cách nào để tìm các bản ghi trùng lặp trong một bảng?
  • Sự khác biệt giữa TRUNCATE và DELETE trong SQL?
  • Sự khác biệt giữa Khóa chính và Khóa ngoài trong một bảng là gì?


Làm cách nào để nhận được mức lương tối đa trong MySQL?

CHỌN TỐI ĐA(lương) TỪ Nhân viên Ở ĐÂU KHÔNG CÓ Lương ( SELECT Max(Lương) TỪ Nhân viên ); . CHỌN TỐI ĐA(Mức lương) Từ Nhân viên WHERE Mức lương < ( SELECT Max(Mức lương) TỪ Nhân viên);

Làm cách nào để tìm mức lương cao nhất đầu tiên trong MySQL?

Chọn thứ tự Lương từ table_name theo giới hạn Lương DESC n-1,1 ; .

Làm cách nào để có mức lương cao thứ n trong MySQL?

Bằng cách thực hiện các bước sau, chúng ta có thể chọn bản ghi cao thứ n trong bảng cơ sở dữ liệu MySQL. 1. .
CHỌN tên, lương TỪ Nhân viên AS emp1
WHERE N-1 = (SELECT COUNT(Lương RIÊNG) TỪ Nhân viên emp2
Emp2 Ở ĐÂU. lương > emp1. lương)

Làm cách nào để có mức lương cao thứ 3 trong MySQL?

Cách dễ nhất để giải quyết vấn đề này là. CHỌN * TỪ `employee_table` ĐẶT HÀNG THEO `sal` DESC GIỚI HẠN 1 BÙA 2 ; .