لنفترض أن لدينا جدولًا باسم Employees
يحتوي على الأعمدة التالية: EmployeeID
, FirstName
, LastName
, Salary
, DepartmentID
.
كيف يمكننا كتابة استعلام لإرجاع أعلى ثلاثة رواتب (Salary) في كل قسم (DepartmentID)؟
/* Option 1 */
SELECT TOP 3 Salary, DepartmentID
FROM Employees
GROUP BY DepartmentID
/* Option 2 */
SELECT Salary, DepartmentID
FROM Employees
WHERE RANK() <= 3
/* Option 3 */
SELECT Salary, DepartmentID
FROM Employees
GROUP BY DepartmentID
ORDER BY Salary DESC LIMIT 3
/* Option 4 */
SELECT Salary, DepartmentID
FROM (
SELECT Salary, DepartmentID,
ROW_NUMBER() OVER (PARTITION BY DepartmentID ORDER BY Salary DESC) AS rank
FROM Employees
) AS RankedSalaries
WHERE rank <= 3;
SQL