دوال SQL

sql GROUP BY

آخر تحيين: 10-01-2015

php mysql : التعامل مع التاريخ و الوقت sql NOW


تقوم التّعليمة GROUP BY ، جمع البيانات المتاشابهة معاً و تُستعمل غالبا مع دوال الجمع :

SELECT SUM(الحقل) FROM الجدول
GROUP BY إسم الحقل;
عند استعمال المعايير الأخرى مع التعليمة GROUP BY يجب وضع هذه الأخيرة مباشرة بعد المعيار WHERE و دائما قبل المعيار ORDER BY
SELECT SUM(الحقل) FROM الجدول
WHERE الشّرط
GROUP BY إسم الحقل
ORDER BY إسم الحقل;

مثال جدول pannier

تخيلوا بأن لديكم موقع تجاري . يقوم الأعضاء باقتناء الأشياء . و كلما أضاف عضو شيئا إلى قائمة مشترياته نُخزّن اختياره في جدول .

idnamestuffprice
1زيدتلفاز800
2زيدآلة تصوير400
3زينبآلة تصبين200
4عمرحاسوب300
5زيدحاسوب200

عندما يُكمل الأعضاء قائمة مشترياتهم . نقوم بجمع أثمنتها لنحدّد الفاتورة الواجب آداءها لكلّ شخص على حدة .

طريقة الإستعمال

SELECT name, SUM(price) as sum_price 
  FROM pannier
  GROUP BY name
  ORDER BY price DESC

بما أننا نُنفذ هذا النوع من الإستعلام ، الذي يقوم بعمليات على البيانات مباشرة في القاعدة . في مثالنا ستقوم الشيفرة أعلاه بجمع أثمنة المشتريات لكل شخص ، ثم تقوم قاعدة البيانات بخلق حقل وهمي لتخزين النتيجة المحصّل عليها . لمعرفة هذه النتيجة ، وجب علينا دائما إضافة هذا الحقل الوهمي في استعلامنا .
لإضافته نستعمل أداة التشبيه "as" . يمكننا تسمية الحقل الوهمي كيفما نشاء ، نعطيه مثلا إسم "sum_price" :

مثال الإستعمال

<?php
$response = $db->prepare('SELECT name, SUM(price) as sum_price 
            FROM pannier
            GROUP BY name
            ORDER BY price DESC
         ');
$response->execute();
$total_price = $response->fetchAll();
$response->CloseCursor();
?>
<table>
<tr>
<th>الإسم</th>
<th>الفاتورة</th>
</tr>
<?php 
foreach ($total_price as $price) {
echo '
<tr> 
  <td>'.$price['name'].'</td>
  <td>'.$price['sum_price'].' دولار</td>	  
<tr>';
}
?>
</table>

النتيجة :

الإسمالفاتورة
زيد1400 دولار
عمر300 دولار
زينب200 دولار