GROUP BY সারিগুলোকে সংক্ষিপ্ত গ্রুপে গুটিয়ে ফেলে, আর HAVING সেই গ্রুপ তৈরি হওয়ার পর সেগুলো ফিল্টার করে।
একই মান শেয়ার করা সারিগুলোকে গ্রুপ করে, যাতে অ্যাগ্রিগেট ফাংশন প্রতিটি গ্রুপ সংক্ষিপ্ত করতে পারে।
SELECT column, AGG(column)
FROM table_name
GROUP BY column;SELECT department, COUNT(*)
FROM Employee
GROUP BY department;| department | count |
|---|---|
| IT | 12 |
| HR | 5 |
সাধারণ ভুল
এমন একটি কলাম সিলেক্ট করা যা গ্রুপ করা নয়, আবার কোনো অ্যাগ্রিগেট ফাংশনেও মোড়ানো নয় — বেশিরভাগ ইঞ্জিন এটি সরাসরি প্রত্যাখ্যান করে।
গ্রুপ করা ফলাফল ফিল্টার করে, যেভাবে WHERE আলাদা আলাদা সারি ফিল্টার করে।
SELECT column, AGG(column)
FROM table_name
GROUP BY column
HAVING condition;SELECT department, COUNT(*)
FROM Employee
GROUP BY department
HAVING COUNT(*) > 5;সাধারণ ভুল
একটি অ্যাগ্রিগেট মানের উপর ফিল্টার করতে WHERE ব্যবহার করা — এটি নির্দিষ্টভাবে HAVING-এর কাজ, কারণ WHERE চলার সময় অ্যাগ্রিগেটটি তখনও তৈরিই হয়নি।
গ্রুপিং আর ফিল্টারিং মূল কোয়েরির শেষ অংশটির ভিত্তি তৈরি করে দেয়: জয়েনের মাধ্যমে একই সাথে একাধিক টেবিলের তথ্য একত্র করা।