عند تجميع الموظفين حسب القسم، يمثل كل صف ناتج مجموعة قد تضم عدة موظفين. لذلك لا يمكن عرض اسم موظف عادي بجانب متوسط القسم دون تحديد كيفية اختياره. في الإعداد الافتراضي ONLY_FULL_GROUP_BY، يرفض MySQL الأعمدة غير المجمعة التي لا تعتمد اعتمادا وظيفيا على أعمدة التجميع.
مثال
SELECT department, AVG(salary) AS average_salary
FROM employees
GROUP BY department;
هذا الاستعلام واضح لأنه يعرض مفتاح المجموعة وقيمة محسوبة منها. إضافة name مباشرة لا تكون صحيحة إذا كان القسم يسمح بوجود أسماء متعددة. كما أن وجود مفتاح أساسي لكل موظف لا يجعل القسم يحدد موظفا واحدا، ما دام التجميع ليس حسب ذلك المفتاح.
إذا كان المطلوب متوسط القسم فقط، احذف الاسم. وإذا كان المطلوب صاحب أعلى راتب، فهذه مسألة أخرى تحتاج إلى ربط الاسم بالراتب المختار. استخدام MIN(name) يختار أصغر اسم وفق ترتيب المقارنة، وليس الموظف الأعلى راتبا.
باختصار: يجب أن يكون لكل عمود ظاهر معنى محدد داخل المجموعة، وإلا يرفضه الإعداد الافتراضي.
هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.