سؤال متقدم SQL

لنفترض أن لدينا جدولًا باسم 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

انتباه: هذا المحتوى عبارة عن سؤال وله إجابات محتملة. هنالك إجابة صحيحة واحدة وتم عرضها في نهاية المحتوى.

انتباه: واحدة من الإجابات أو الخيارات المحتملة أدناه للسؤال تكون صحيحة.

الإجابة الصحيحة للسؤال أعلاه:

Option 4

في هذا الاستعلام، نستخدم الدالة ROW_NUMBER() مع عبارة PARTITION BY لتقسيم البيانات حسب كل قسم (DepartmentID) وترتيب الرواتب (Salary) بشكل تنازلي داخل كل قسم. هذا يُعطي كل راتب رقم ترتيب (rank) حسب قيمته في القسم. ثم، باستخدام الاستعلام الفرعي، نقوم بتصفية النتائج بحيث نحتفظ فقط بالرواتب التي ترتيبها (rank) يساوي 3 أو أقل، مما يُرجع أعلى ثلاثة رواتب لكل قسم

عرض المزيد من الأسئلة كهذا السؤال؟

هل تعلمت شيئاً جديداً من هذا الاختبار البرمجي القصير؟

باستطاعتك تعزيز معرفتك وفهمك حول مواضيع هذا الاختبار القصير من خلال الاستفادة من المسارات التعليمية التي نقدمها. يتيح لك هذا الخيار الوصول إلى مصادر تعليمية شاملة ومتنوعة بكل سهولة ويسر، فكل ما عليك هو النقر على الرابط المناسب للوصول إلى الموارد التعليمية المفيدة. استثمر وقتك بشكل فعّال واستفد بأقصى درجة من هذه الفرصة لتعزيز مهاراتك وتحقيق أهدافك التعليمية والمهنية.

ابدأ رحلة الاحتراف
وانضم لدروس المبتدئين لتعلم تطوير الويب