يمكن استخدام استعلام فرعي داخل WHERE لمقارنة قيمة في كل صف بنتيجة محسوبة من مجموعة صفوف. مثلًا، إذا أردت اختيار الموظفين الذين تتجاوز رواتبهم متوسط الرواتب، يمكنك حساب المتوسط داخل استعلام فرعي ثم استخدامه في المقارنة. بهذه الطريقة لا تحتاج إلى حساب المتوسط يدويًا أو نسخه إلى الاستعلام.
يعيد الاستعلام الذي يستخدم AVG دون تجميع قيمة واحدة، ولذلك يناسب المقارنة باستخدام >. يشير الاستعلام الخارجي إلى الموظفين المطلوب فحصهم، بينما يحسب الاستعلام الداخلي القيمة المرجعية. في المثال التالي، يحتوي جدول الموظفين الافتراضي على راتبين، ويختار الشرط الراتب الذي يتجاوز متوسطهما.
مثال
WITH employees AS (
SELECT 1 AS id, 1000 AS salary
UNION ALL
SELECT 2, 3000
)
SELECT id, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
لا يعني وجود الاستعلام الفرعي أن المتوسط يُحسب لكل قسم؛ فهذا يحتاج إلى شرط إضافي يربط الحساب بالقسم. كما أن الراتب المساوي للمتوسط لا يحقق المقارنة المستخدمة هنا.
باختصار: استخدم استعلامًا فرعيًا يعيد المتوسط، ثم قارن راتب كل موظف بهذه القيمة داخل WHERE.
هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.