تستخدم العبارة 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: Cant group on total
يمكن الفرز حسب عمود آخر غير الأعمدة الواردة في الاستعلام ولكنك ستحصل على نتيجة مختلفة عن التي تصبو إليها وإليك هذا المثال:
select state , count(state) as total from adrs group by emp_no