group-by

পাঠ ৯ · GROUP BY

GROUP BY কী?

আগের পাঠে পুরো টেবিলের জন্য একটি হিসাব করেছি। কিন্তু প্রতিটি গ্রুপে কতজন, প্রতিটি শিক্ষার্থীর মোট নম্বর কত, এমন প্রশ্নে প্রতিটি দলের জন্য আলাদা হিসাব লাগে। GROUP BY একই মানের সারিগুলোকে একটি দলে রাখে। তারপর প্রতিটি দলের জন্য Aggregate ফাংশন আলাদা করে হিসাব করে।

সিনট্যাক্স

SQL Syntax Rule
SELECT [কলামের নাম], [ফাংশন]([কলামের নাম])
FROM [টেবিলের নাম]
GROUP BY [কলামের নাম];

উদাহরণ ১: প্রতিটি গ্রুপে কতজন

SELECT group_name, COUNT(*) AS total
FROM student
GROUP BY group_name;

ব্যাখ্যা

  • GROUP BY group_name→একই group_name এর সারিগুলো এক দলে যায়
  • COUNT(*)→প্রতিটি দলে কয়টি সারি গণনা করে
  • group_name→দলের নাম ফলাফলে দেখায়

নিচের টেবিলে একই রঙের সারি একই দলে। Science এর দুজন নীল, Commerce এর দুজন হলুদ, Arts এর একজন সবুজ।

student (মূল টেবিল)৫টি সারি
rollnameclasssectiongroup_name
1Rudra11AScience
2Habib12ACommerce
3Pappu11BArts
4Anik12BScience
5Priya11ACommerce
↓ GROUP BY group_name
ফলাফল৩টি সারি
group_nametotal
Arts1
Commerce2
Science2

উদাহরণ ২: প্রতিটি শিক্ষার্থীর মোট নম্বর

result টেবিলে প্রতিটি roll এর তিনটি করে সারি আছে। roll অনুযায়ী দল করে নম্বর যোগ করি।

SELECT roll, SUM(marks) AS total_marks
FROM result
GROUP BY roll;
result (মূল টেবিল)১৫টি সারি
rollsubject_codemarks
127588
117482
110176
227578
225375
210972
327529
330465
310160
427531
417490
410170
527565
525384
510980
↓ GROUP BY roll
ফলাফল৫টি সারি
rolltotal_marks
1246
2225
3154
4191
5229

উদাহরণ ৩: প্রতিটি বিষয়ের গড়

SELECT subject_code, ROUND(AVG(marks), 2) AS avg_marks
FROM result
GROUP BY subject_code;
ফলাফল৬টি সারি
subject_codeavg_marks
10168.67
10976.0
17486.0
25379.5
27558.2
30465.0

আরও একটি উদাহরণ: দুই কলামে দল

প্রতিটি class ও section এ কতজন আছে? দুই কলাম দিলে দুটোর মান একই হলে তবেই এক দলে যায়।

SELECT class, section, COUNT(*) AS total
FROM student
GROUP BY class, section;
ফলাফল৪টি সারি
classsectiontotal
11A2
11B1
12A1
12B1

class 11, section A তে Rudra ও Priya আছে। তাই সেখানে total 2।

মনে রাখো
  • SELECT এ যে সাধারণ কলাম লিখবে (ফাংশনের বাইরে), সেটি GROUP BY তেও লিখতে হবে।
  • GROUP BY বসে WHERE এর পরে আর ORDER BY এর আগে।
  • ফলাফলের দলগুলো কোন ক্রমে আসবে তা DBMS ভেদে আলাদা হতে পারে। নির্দিষ্ট ক্রম চাইলে ORDER BY দাও।

অনুশীলন

প্রতিটি প্রশ্নের Query নিজে লেখো। চাইলে SQL Playground এ টেবিল তৈরি করে চালিয়ে দেখো। তারপর উত্তর মিলিয়ে নাও।

১

প্রতিটি class এ কতজন শিক্ষার্থী আছে?

উত্তর দেখো
SELECT class, COUNT(*) AS total
FROM student
GROUP BY class;
ফলাফল২টি সারি
classtotal
113
122
২

প্রতিটি বিষয়ে (subject_code) সর্বোচ্চ নম্বর কত?

উত্তর দেখো
SELECT subject_code, MAX(marks) AS highest
FROM result
GROUP BY subject_code;
ফলাফল৬টি সারি
subject_codehighest
10176
10980
17490
25384
27588
30465
৩

প্রতিটি roll কয়টি বিষয়ে পরীক্ষা দিয়েছে?

উত্তর দেখো
SELECT roll, COUNT(*) AS total_subject
FROM result
GROUP BY roll;
ফলাফল৫টি সারি
rolltotal_subject
13
23
33
43
53
৪

subject টেবিলে প্রতিটি group_name এ কয়টি বিষয় আছে?

উত্তর দেখো
SELECT group_name, COUNT(*) AS total
FROM subject
GROUP BY group_name;
ফলাফল৪টি সারি
group_nametotal
Arts1
Commerce2
Common2
Science1