بسم الله الرحمن الرحيم
عنوان الدرس : التوابع الرياضية في MySQL - الجزء الثالث
العبارة group by :
تستخدم العبارة group by مع التوابع الرياضية في MySQL من أجل عمليات الفرز حسب النتائج, و هي تختلف عن العبارة order by حيث أن الأخيرة تستخدم لفرز السجلات الصادرة عن الاستعلام, بينما العبارة group by تستخدم لفرز النتائج الصادرة عن التوابع الرياضية في الاستعلام,
دعنا نأخذ المثال التالي:
قم بكتابة استعلام يعيد اسم الولاية و عدد الولايات.
select state , count(state) as total from adrs
group by state;
ستظهر النتيجة التالية:
+--------------+-------+
|state |total |
+--------------+-------+
|Egypt |1 |
|Syria |2 |
|Yemen |1 |
+--------------+-------+
مع الأخذ بعين الاعتبار أن الفرز الافتراضي يكون تصاعدياً asc, و لجعل الفرز تنازلياً عليك أن تضيف العبارة desc في آخر الاستعلام.
طبعاً لا يمكن الفرز حسب العبارة count(state) أو الاسم المستعار لها, و في كلا الحالتين سيظهر خطأ كما هو مبين في المثالين التاليين:
الخطأ 1:
select state , count(state) as total from adrs
group by count(state);
ستظهر رسالة الخطأ التالية:
ERROR 1111: Invalid use of group function
الخطأ 2:
select state , count(state) as total from adrs
group by total;
ستظهر رسالة الخطأ التالية:
ERROR 1056: Can't group on 'total'
يمكن الفرز حسب عمود آخر غير الأعمدة الواردة في الاستعلام و لكنك ستحصل على نتيجة مختلفة عن التي تصبو إليها, و إليك هذا المثال:
select state , count(state) as total from adrs group by emp_no;
عندها ستظهر النتيجة التالية:
+--------------+-------+
|state |total |
+--------------+-------+
|Syria |1 |
|Egypt |1 |
|Syria |1 |
|Yemen |1 |
+--------------+-------+
طبعاً ظهرت نتيجة و لكنها ليست كالتي تتوقعها.
و آخر دعوانا أن الحمد لله رب العالمين
أخوكم أبـو عمر