الدالتان MIN وMAX من الدوال التجميعية الشائعة في SQL. تُرجع MIN أصغر قيمة في عمود معيّن، وتُرجع MAX أكبر قيمة فيه. وتعملان مع الأرقام والتواريخ وحتى النصوص (حيث يُحسب الترتيب الأبجدي). وغالباً ما تُستخدمان لمعرفة أرخص منتج أو أعلى راتب أو أحدث تاريخ تسجيل.
الدالة MIN
تُعيد MIN أصغر قيمة في العمود، وتتجاهل القيم الفارغة أثناء الحساب.
SELECT MIN(price) AS lowest_price FROM products;
الدالة MAX
تُعيد MAX أكبر قيمة في العمود، وهي مفيدة لمعرفة الحد الأعلى مثل أعلى راتب أو أحدث طلب.
SELECT MAX(salary) AS highest_salary FROM employees;
الدمج مع شرط WHERE
يمكن تضييق نطاق البحث بإضافة شرط WHERE قبل حساب القيمة الصغرى أو الكبرى:
SELECT MIN(price) FROM products
WHERE category = 'هواتف';
الدمج مع GROUP BY
عند الدمج مع GROUP BY نحصل على أصغر أو أكبر قيمة لكل مجموعة، كأعلى سعر في كل تصنيف:
SELECT category, MAX(price) AS top_price
FROM products
GROUP BY category;
أخطاء شائعة
- توقّع أن MAX(price) يُرجع بقية بيانات الصف صاحب أعلى سعر؛ هي تُرجع القيمة فقط لا الصف كاملاً.
- نسيان أن MIN وMAX تعملان على النصوص بالترتيب الأبجدي، ما قد يفاجئ من يتوقع ترتيباً رقمياً.
- إهمال أثر قيم NULL، إذ تتجاهلها الدالتان تماماً عند الحساب.
تمرين محلول
المطلوب: لكل تصنيف منتجات، اعرض أرخص سعر وأغلى سعر في صفٍّ واحد.
SELECT category,
MIN(price) AS cheapest,
MAX(price) AS most_expensive
FROM products
GROUP BY category;
جمّعنا المنتجات حسب التصنيف، ثم استخدمنا MIN وMAX معاً لإظهار نطاق الأسعار في كل تصنيف بنظرة واحدة.
الخلاصة
تمنحك الدالتان MIN وMAX طريقة سريعة لاستخراج أصغر وأكبر القيم في عمود، وحدهما أو ضمن مجموعات عبر GROUP BY. وتذكّر أنهما تُرجعان القيمة فقط لا الصف كاملاً، ولاستخراج بيانات الصف المرتبط يلزم استعلام فرعي أو ترتيب مع LIMIT.
