Làm cách nào tôi có thể tìm mức lương cao nhất thứ N trong bảng chứa tiền lương trong SQL Server?Truy vấn SQL để tìm mức lương cao nhất Nth từ bảng lương
Trả lời
Bạn có thể sử dụng Biểu thức bảng chung (CTE) để lấy câu trả lời.
Hãy nói rằng bạn có lương sau trong Lương bả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
này sẽ tạo ra một số lượng hàng cho mỗi hàng sau khi đã được sắp xếp theo Mức lương theo thứ tự giảm dần, sau đó lấy hàng thứ ba (có chứa bản ghi cao thứ ba).
Đối với những người bạn của những người không muốn có một CTE (hoặc đang mắc kẹt trong SQL 2000):
[Note: đây thực hiện noticably tồi tệ hơn ví dụ trên; chạy song song với một kế hoạch phòng ngừa 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 được xác định bởi bạn.
SalarySubquery
là bí danh mà tôi đã cung cấp cho truy vấn con hoặc truy vấn nằm trong dấu ngoặc đơn.
Truy vấn con nào chọn N khoản lương hàng đầu (chúng tôi sẽ nói trong trường hợp này) và yêu cầu họ bằng mức lương cao nhất.
Nếu chúng ta muốn nhìn thấy các-cao thứ ba tiền lương, subquery sẽ trở lại:
Salary
-----------
80,000
72,000
50,000
Truy vấn bên ngoài sau đó chọn mức lương đầu tiên từ subquery, ngoại trừ chúng ta sắp xếp nó tăng dần thời gian này, từ nhỏ nhất đến lớn nhất, vì vậy 50.000 sẽ là kỷ lục đầ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ụ.
phần này không rõ ràng cho tôi có thể giải thích cho tôi SalarySubquery ORDER BY ASC lương – NoviceToDotNet
@NoviceToDotNet - Tôi đã chỉnh sửa câu trả lời của mình dựa trên nhận xét của bạn - Tôi hy vọng họ làm rõ mọi thứ. – LittleBobbyTables
@LittleBobbyTables: Tôi đã chỉnh sửa câu trả lời ur - phần CTE. Nếu đúng, vui lòng chấp nhận các thay đổi, nếu không, hãy sửa tôi. –
Bạn có thể sử dụng row_number
để chọn một hàng cụ thể. Ví dụ, 42 lương cao nhất:
select *
from (
select row_number() over (order by Salary desc) as rn
, *
from YourTable
) as Subquery
where rn = 42
chức năng Windowed như row_number
chỉ có thể xuất hiện trong select
hoặc order by
khoản. Giải pháp thay thế là đặt row_number
trong truy vấn phụ.
select MIN(salary) from (
select top 5 salary from employees order by salary desc) x
Tôi nghĩ nó đơn giản nhất. làm tốt lắm!! – himanshupareek66
cách đơn giản mà không sử dụng bất kỳ tính năng đặc biệt cụ thể đối với Oracle, MySQL, vv Giả sử trong Lương bảng EMPLOYEE có thể được lặp đi lặp lại. Sử dụng truy vấn để tìm hiểu thứ hạng của từng ID.
select *
from (
select tout.sal, id, (select count(*) +1 from (select distinct(sal) distsal from
EMPLOYEE) where distsal >tout.sal) as rank from EMPLOYEE tout
) result
order by rank
Trước tiên, chúng tôi tìm ra mức lương riêng biệt. Sau đó, chúng tôi tìm ra số tiền lương riêng biệt lớn hơn mỗi hàng. Điều này không là gì ngoài thứ hạng của id đó. Đối với mức lương cao nhất, số tiền này sẽ bằng không. Vì vậy, '+1' được thực hiện để bắt đầu xếp hạng từ 1.
Bây giờ chúng tôi có thể nhận ID ở cấp thứ N bằng cách thêm mệnh đề where vào truy vấn ở trên.
select *
from (
select tout.sal, id, (select count(*) +1 from (select distinct(sal) distsal from
EMPLOYEE) where distsal >tout.sal) as rank from EMPLOYEE tout
) result
where rank = N;
thử nó ...
use table_name
select MAX(salary)
from emp_salary
WHERE marks NOT IN (select MAX(marks)
from student_marks)
Rất đơn giản một truy vấn để tìm thứ n lương cao nhất
SELECT DISTINCT(Sal) FROM emp ORDER BY Salary DESC LIMIT n,1
Thẻ này được gắn thẻ là ** [sql-server] **; SQL Server không có LIMIT từ khóa – LittleBobbyTables
Phương pháp đơn giản nhất là để có được 2nd higest salary
từ table
trong SQL
:
sql> select max(sal) from emp where sal not in (select max(sal) from emp);
Dont quên sử dụng từ khóa distinct
: -
SELECT TOP 1 Salary
FROM
(
SELECT Distinct TOP N Salary
FROM Salaries
ORDER BY Salary DESC
) SalarySubquery
ORDER BY Salary ASC
EmpID Name Salary
1 A 100
2 B 800
3 C 300
4 D 400
5 E 500
6 F 200
7 G 600
SELECT * FROM Employee E1
WHERE (N-1) = (
SELECT COUNT(DISTINCT(E2.Salary))
FROM Employee E2
WHERE E2.Salary > E1.Salary
)
Giả sử bạn muốn tìm lương cao nhất 5, có nghĩa là có tất cả 4 nhân viên có lương lớn hơn nhân viên cao nhất 5. Vì vậy, đối với mỗi hàng từ truy vấn bên ngoài, hãy kiểm tra tổng số tiền lương lớn hơn mức lương hiện tại. Truy vấn bên ngoài sẽ làm việc cho 100 đầu tiên và kiểm tra số tiền lương lớn hơn 100. Nó sẽ là 6, không phù hợp với (5-1) = 6
nơi khoản của outerquery. Sau đó, cho 800, và kiểm tra số tiền lương lớn hơn 800, 4=0
sai sau đó làm việc cho 300 và cuối cùng có hoàn toàn 4 bản ghi trong bảng lớn hơn 300. Do đó, 4=4
sẽ đáp ứng mệnh đề where và sẽ trả về 3 C 300
.
Giải pháp 1: SQL này để tìm lương thứ N cao nhất nên làm việc trong SQL Server, MySQL, DB2, Oracle, Teradata, và hầu hết các RDBMS khác: (lưu ý: hiệu suất thấp vì subquery)
SELECT * /*This is the outer query part */
FROM Employee Emp1
WHERE (N-1) = (/* Subquery starts here */
SELECT COUNT(DISTINCT(Emp2.Salary))
FROM Employee Emp2
WHERE Emp2.Salary > Emp1.Salary)
Điều quan trọng nhất cần hiểu trong truy vấn ở trên là truy vấn con được đánh giá mỗi lần mỗi hàng được truy vấn bên ngoài xử lý. Nói cách khác, truy vấn bên trong không thể được xử lý độc lập với truy vấn bên ngoài vì truy vấn bên trong cũng sử dụng giá trị Emp1.
Để tìm mức lương cao nhất thứ N, chúng tôi chỉ tìm mức lương có chính xác N-1 tiền lương lớn hơn chính nó.
Giải pháp 2: Tìm mức lương cao nhất thứ n sử dụng từ khóa TOP trong SQL Server
SELECT TOP 1 Salary
FROM (
SELECT DISTINCT TOP N Salary
FROM Employee
ORDER BY Salary DESC
) AS Emp
ORDER BY Salary
Giải pháp 3: Tìm mức lương cao nhất thứ n trong SQL Server mà không sử dụng TOP
SELECT Salary FROM Employee
ORDER BY Salary DESC OFFSET N-1 ROW(S)
FETCH FIRST ROW ONLY
Lưu ý rằng tôi chưa tự kiểm tra SQL ở trên và tôi tin rằng nó sẽ chỉ hoạt động trong SQL Server 2012 trở lên.
SELECT * FROM
(select distinct postalcode from Customers order by postalcode DESC)
limit 4,1;
4 ở đây có nghĩa rời đầu tiên 4 và hiển thị tiếp theo 1.
Hãy thử điều này nó làm việc cho tôi.
Mã bưu điện ở đây là tên cột và Khách hàng là tên bảng. –
- 1. Rspec không hoạt động hoặc không tăng lương?
- 2. Tính toán mức lương của người dạy kèm dựa trên các phân đoạn riêng biệt sử dụng mysql
- 3. Truy vấn SQL để tìm khóa chính của bảng?
- 4. Truy vấn Sql để tìm bảng Temp trong DB
- 5. SQL Nối bảng truy vấn
- 6. SQL - Xác định bảng nguồn từ truy vấn UNION
- 7. tìm thấy giá trị cao nhất trong mức yếu tố
- 8. Truy vấn SQL JOIN với Bảng
- 9. Oracle SQL - Cách lấy 5 giá trị cao nhất của một cột
- 10. SQL: Nhiều bảng và truy vấn
- 11. truy vấn sql để tìm các bản ghi trùng lặp
- 12. Tìm bảng từ tên cột truy vấn trong oracle Nhà phát triển SQL
- 13. Cách tiếp cận hiệu năng cao đối với truy vấn SQL lớn nhất n-mỗi nhóm
- 14. Truy vấn SQL để nhận giá mới nhất
- 15. C# tìm Nth Root
- 16. Truy vấn ngày tạo bảng SQL Server
- 17. truy vấn sql để có được ngày sớm nhất
- 18. Truy vấn SQL để tìm số Kevin Bacon số 2
- 19. Truy vấn MySql nâng cao: Cập nhật bảng với thông tin từ một bảng khác
- 20. Truy vấn SQL Server từ PHP
- 21. Truy vấn SQL để tham gia hai bảng dựa trên dấu thời gian gần nhất
- 22. Tìm hiểu lịch sử truy vấn SQL
- 23. SQL - Cách tìm số cao nhất trong một cột?
- 24. Tạo truy vấn SQL để truy xuất các bản ghi gần đây nhất
- 25. Oracle: Truy vấn SQL để tìm tất cả các trình kích hoạt thuộc về các bảng?
- 26. Truy vấn SQL để tìm kiếm lược đồ của tất cả các bảng
- 27. Truy vấn SQL để tìm các giá trị khác biệt trong hai bảng?
- 28. Cách tạo truy vấn tìm kiếm sql mạnh mẽ hơn?
- 29. Truy vấn SQL nâng cao. Top 12 từ mỗi loại (MYSQL)
- 30. Trợ giúp truy vấn SQL với bảng bridge
Một blog chi tiết: http://sforsuresh.in/mysql-query-nth-highest-salary-from-employee-table/ –