group by

برای استفاده بهتر از توابع sql ما اطلاعات موجود در ستون ( فیلد) خاصی را که مورد نظر ما است گرو هبندی می کنیم

 

روش استفاده :

 

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

 

darse name
18 ali
20 reza
18 ali
17 reza

 

حال می خواهیم مجموع نمرات دروس علی و رضا را بدست آوریم

باید جدول را بر اساس فیلد نام گروه بندی کنیم :

select name,sum(darse) from t1

group by name;

چون در اینجا شرط خاصی جهت انتخاب نام ها نداشتیم پس از where استفاده نکردیم

اما اگر شرط خاصی برای مقادیر حاصل از توابع اس کیو ال دارید   باید از دستور having بعد از group by برای بیان ان شرط استفاده کنید

خروجی :

 

darse name
36 ali
37 reza



having

روش استفاده :

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value

 

 

darse name
18 ali
20 reza
18 ali
17 reza

 

حال می خواهیم مجموع نمرات افرادی را مشاهده کنیم که این مجموع از 37 بیشتر یا مساوی است

باید جدول را بر اساس فیلد نام گروه بندی کنیم :

select name,sum(darse) from t1

group by name

having sum(darse) >=37;

 

چون در اینجا شرط خاصی جهت انتخاب نام ها نداشتیم پس از where استفاده نکردیم

اما اگر شرط خاصی برای مقادیر حاصل از توابع اس کیو ال دارید   باید از دستور having بعد از group by برای بیان ان شرط استفاده کنید

خروجی :

 

darse name
37 reza


مثال 2 :

نام و مجموع نمرات فردی که نام ان علی  یا رضا است و مجموع نمرات انها بیشتر از دوازده است نشان دهید

select name,sum(darse)

where name="ali" or name="reza"

group by (name)

having sum(darse)>12;

خط اول :

می گه در خروجی چه چیزهایی را می خواهید ببینید : نام و مجموع درس

خط دوم :

می گه مجموع نمرات چه افرادی را می خواهید ببنید : می گه کسانی که اسمشون علی یا رضا باشه

خط سوم :

می گه نمرات موجود در ستون darse را چطور با هم جمه بزنه اگه دستور group by نداشته باشید تمام نمرات ستون درس را با هم جمع می زنه و براش مهم نیست این نمره ها مال کیه

اما اگه مهمه براتون که نمره های هر نفر جدا جدا جمع زده بشه پس بر اساس نامشون گروه بندی کنین

خط چهارم :

اگه هر مدل مجموعی را خواستین ببینین که هیچی ولی اگه خواستین رو نتیجه حاصل از تابع sum شرط بذارین باید این کار را با having انجام بدین یعنی مجموع هایی را نشان بده که بیشتر از دوازده باشن