চারটা প্রতিষ্ঠান, একই ধরনের প্রশ্ন
SQL Syntax দিয়ে শুরু করবো না। প্রথমে বাস্তব বিজনেস সমস্যাটা বুঝি — কেন হাজার হাজার আলাদা রেকর্ড না দেখে একটা সংক্ষিপ্ত সামারি দরকার হয়।
Sequence: এই Module 34 = GROUP BY · পরে HAVING (35) · Aggregate deep dive = Module 48।
- আমরা কি ১,০০,০০০ ছাত্র হাতে হাতে গুনে ডিপার্টমেন্ট অনুযায়ী ভাগ করবো?
- এর চেয়ে সহজ কোনো উপায় কি আছে?
এই চারটা গল্পেরই সমাধান একটাই — ডেটাবেস একটা বিশেষ ক্লজ ব্যবহার করে একই ধরনের রো-গুলোকে দলবদ্ধ করে, প্রতিটা দলের জন্য একটা করে সামারি সংখ্যা বের করে দেয়। নাম তার GROUP BY।
Raw Table → Grouped → Summary Table
GROUP BY হলো SQL-এর এমন একটা ক্লজ, যেটা একই মান থাকা রো-গুলোকে একসাথে দলবদ্ধ করে, এবং প্রতিটা দলের জন্য একটা করে সামারি ভ্যালু (COUNT, SUM, AVG ইত্যাদি) হিসাব করে।
| বিষয় | Raw Data | Grouped/Summarized Data |
|---|---|---|
| রো সংখ্যা | হাজার হাজার | মাত্র কয়েকটা (প্রতি দলে ১টা) |
| বোঝা | কঠিন | সহজ |
| ব্যবহার | বিস্তারিত অডিটের জন্য | এক্সিকিউটিভ সিদ্ধান্তের জন্য |
Aggregates — use only (no reteach)
GROUP BY-এর সাথে সাধারণত COUNT / SUM / AVG / MAX / MIN ব্যবহার হয় — এখানে শুধু মনে করিয়ে দিচ্ছি, নতুন করে শেখানো হচ্ছে না।
Quick map (deep dive later)
COUNT(*) · SUM(col) · AVG(col) · MAX(col) · MIN(col)
Full Aggregate masterclass = Module 48 · sql_aggregate_functions_bangla.html। এই module-এর focus = GROUP BY mechanics।
Aggregate + GROUP BY = আসল শক্তি
SELECT Department,
COUNT(*) AS Total_Students
FROM Students
GROUP BY Department;
| Department | Total_Students |
|---|---|
| CSE | 36000 |
| EEE | 30000 |
| BBA | 34000 |
GROUP BY Department প্রথমে ১,০০,০০০ ছাত্রকে ডিপার্টমেন্ট অনুযায়ী দলে ভাগ করছে, তারপর COUNT(*) প্রতিটা দল আলাদাভাবে গুনছে।
একই প্যাটার্ন অন্যান্য ডেটাসেটেও কাজ করে:
| ডেটাসেট | বিজনেস প্রশ্ন | SQL |
|---|---|---|
| Employees | প্রতিটা ডিপার্টমেন্টে কতজন কর্মী | GROUP BY Department |
| Customers | প্রতিটা শহরে কতজন কাস্টমার | GROUP BY City |
| Products | প্রতিটা ক্যাটাগরিতে কতগুলো প্রোডাক্ট | GROUP BY Category |
Department, তারপর Gender
SELECT Department,
Gender,
COUNT(*) AS Total
FROM Employees
GROUP BY Department, Gender;
| Department | Gender | Total |
|---|---|---|
| IT | Male | 240 |
| IT | Female | 110 |
| Sales | Male | 180 |
| Sales | Female | 150 |
প্রথমে Department অনুযায়ী বড় দলে ভাগ, তারপর প্রতিটা Department-এর ভেতরে Gender অনুযায়ী উপ-দলে ভাগ।
| বিজনেস প্রশ্ন | GROUP BY |
|---|---|
| দেশ ও শহর অনুযায়ী কাস্টমার | Country, City |
| ক্যাটাগরি ও ব্র্যান্ড অনুযায়ী প্রোডাক্ট | Category, Brand |
| বছর ও মাস অনুযায়ী বিক্রি | Year, Month |
| ডিপার্টমেন্ট ও পদবি অনুযায়ী কর্মী | Department, Designation |
প্রথমে ফিল্টার, তারপর দলবদ্ধ
SELECT Gender, COUNT(*) AS Total FROM Employees WHERE Department = 'IT' GROUP BY Gender;
প্রথমে WHERE দিয়ে শুধু IT কর্মী বেছে নেওয়া, তারপর সেই ছোট তালিকাকে Gender অনুযায়ী দলবদ্ধ করা।
SELECT Category, AVG(Price) AS Avg_Price FROM Products WHERE Price > 500 GROUP BY Category;
SELECT Department, AVG(CGPA) AS Avg_CGPA FROM Students WHERE Department = 'CSE' GROUP BY Department;
দলবদ্ধ হওয়ার পরে ফিল্টার করা
WHERE দিয়ে করা যায় না, কারণ COUNT(*) তো গ্রুপ তৈরি হওয়ার পরে হিসাব হয়।
SELECT Department, COUNT(*) AS Total_Students FROM Students GROUP BY Department HAVING COUNT(*) > 100;
HAVING গ্রুপ ও Aggregate হিসাব হওয়ার পরে প্রয়োগ হয় — তাই Aggregate Function-এর শর্ত এখানে বসানো যায়, WHERE-এ যায় না।
SELECT Category, AVG(Price) AS Avg_Price FROM Products GROUP BY Category HAVING AVG(Price) > 500;
SELECT City, SUM(Amount) AS Total_Sales FROM Orders GROUP BY City HAVING SUM(Amount) > 100000;
| বিষয় | WHERE | HAVING |
|---|---|---|
| কাজ করে কখন | দলবদ্ধ হওয়ার আগে | দলবদ্ধ হওয়ার পরে |
| ফিল্টার করে | পৃথক রো | দলবদ্ধ ফলাফল |
| Aggregate Function | ব্যবহার করা যায় না | ব্যবহার করা যায় |
E-commerce Sales Database — ৭টা রিয়েল রিপোর্ট
SELECT Category, COUNT(*) AS Total_Products FROM Products GROUP BY Category;
SELECT Category, SUM(Units_Sold * Price) AS Total_Sales FROM Products GROUP BY Category;
SELECT Brand, AVG(Price) AS Avg_Price FROM Products GROUP BY Brand;
SELECT MAX(Price) AS Highest_Price FROM Products;
SELECT MIN(Price) AS Lowest_Price FROM Products;
SELECT Category, COUNT(*) AS Total FROM Products GROUP BY Category HAVING COUNT(*) > 20;
SELECT MONTH(Order_Date) AS Month, SUM(Amount) AS Total_Sales FROM Orders GROUP BY MONTH(Order_Date);
MySQL Workbench / Google Colab-এ ধাপে ধাপে
CREATE DATABASE sales_demo;
USE sales_demo;
CREATE TABLE Products (
Product_ID INT PRIMARY KEY,
Product_Name VARCHAR(100),
Category VARCHAR(50),
Brand VARCHAR(50),
Price DECIMAL(10,2),
Units_Sold INT
);
INSERT INTO Products VALUES (1, 'Mouse', 'Electronics', 'Logitech', 450.00, 120), (2, 'Keyboard', 'Electronics', 'HP', 1200.00, 80), (3, 'Notebook', 'Stationery', 'Generic', 60.00, 300), (4, 'Pen', 'Stationery', 'Generic', 20.00, 500), (5, 'Monitor', 'Electronics', 'Samsung', 9500.00, 30);
SELECT COUNT(*) AS Total FROM Products;
SELECT SUM(Units_Sold) AS Total_Units FROM Products;
SELECT AVG(Price) AS Avg_Price FROM Products;
SELECT MAX(Price) AS Highest, MIN(Price) AS Lowest FROM Products;
SELECT Category, COUNT(*) AS Total, AVG(Price) AS Avg_Price FROM Products GROUP BY Category;
| Category | Total | Avg_Price |
|---|---|---|
| Electronics | 3 | 3716.67 |
| Stationery | 2 | 40.00 |
SELECT Category, Product_Name, COUNT(*) FROM Products GROUP BY Category; — এখানে Product_Name GROUP BY-তেও নেই, Aggregate-ও নয়, তাই এরর বা অনির্দিষ্ট ফলাফল আসবে।
SELECT Category, AVG(Price) AS Avg_Price FROM Products WHERE Price > 100 GROUP BY Category;
SELECT Category, COUNT(*) AS Total FROM Products GROUP BY Category HAVING COUNT(*) >= 3;
গ্রুপ-ভিত্তিক শর্তের জন্য সবসময় HAVING ব্যবহার করো, WHERE নয়।
SELECT Category,
COUNT(*) AS Total_Products,
SUM(Units_Sold) AS Total_Units,
AVG(Price) AS Avg_Price,
MAX(Price) AS Max_Price,
MIN(Price) AS Min_Price
FROM Products
GROUP BY Category
HAVING COUNT(*) >= 2
ORDER BY Total_Units DESC;
এই একটা কোয়েরিতেই GROUP BY, একাধিক Aggregate Function, HAVING, এবং ORDER BY — সবগুলো একসাথে কাজ করছে। এটাই বাস্তব বিজনেস রিপোর্টের প্যাটার্ন।
বিগিনাররা যেখানে আটকায়
| ভুল | কেন হয় | সংশোধন |
|---|---|---|
| GROUP BY লিখতে ভুলে যাওয়া | Aggregate ও সাধারণ কলাম একসাথে SELECT করা হয় | Aggregate Function ব্যবহার করলে বাকি কলাম GROUP BY-তে থাকতে হবে |
| GROUP BY-তে নেই এমন কলাম SELECT করা | ভুলবশত অতিরিক্ত কলাম যোগ করা | শুধু GROUP BY কলাম বা Aggregate Function SELECT করো |
| Aggregate ও non-aggregate কলাম মিশিয়ে ফেলা | দুই ধরনের কলাম একসাথে বোঝা কঠিন লাগা | নিয়ম মুখস্থ রাখো — GROUP BY-তে থাকা কলাম, নাহলে Aggregate Function |
| WHERE ও HAVING গুলিয়ে ফেলা | দুটোই "ফিল্টার" মনে হয় | রো ফিল্টারে WHERE, গ্রুপ/Aggregate ফিল্টারে HAVING |
| Aggregate Function ব্যবহার করতে ভুলে যাওয়া | শুধু GROUP BY লিখলেই যথেষ্ট মনে করা | COUNT/SUM/AVG/MAX/MIN অবশ্যই লাগবে |
| ভুল কলামে GROUP BY করা | বিজনেস প্রশ্ন সঠিকভাবে না বোঝা | "প্রতিটা X-এর জন্য" মানে X কলামে GROUP BY |
| অপ্রয়োজনে GROUP BY ব্যবহার করা | একটামাত্র সামারি দরকার হলেও GROUP BY লেখা | একটাই ভ্যালু দরকার হলে GROUP BY ছাড়াই Aggregate Function যথেষ্ট |
প্রফেশনালরা প্রতিদিন যেভাবে ব্যবহার করে
এখন সবাই মিলে করি
SELECT Department, Name, COUNT(*) FROM Employees GROUP BY Department; — এখানে কী ভুল?Quick Revision Notes ও Cheat Sheet
SQL GROUP BY Cheat Sheet
-- বেসিক
SELECT column, AGG_FUNC(column2)
FROM table
GROUP BY column;
-- একাধিক কলাম
GROUP BY col1, col2;
-- WHERE সহ
SELECT ... FROM ... WHERE condition GROUP BY column;
-- HAVING সহ (গ্রুপ ফিল্টার)
SELECT ... GROUP BY column HAVING AGG_FUNC(column2) > value;
- GROUP BY একই মান থাকা রো-গুলোকে দলবদ্ধ করে সামারি তৈরি করে।
- সবসময় Aggregate Function (COUNT, SUM, AVG, MAX, MIN)-এর সাথে ব্যবহার হয়।
- WHERE = দলবদ্ধ হওয়ার আগে ফিল্টার; HAVING = পরে ফিল্টার।
- এক্সিকিউশন ক্রম:
FROM → WHERE → GROUP BY → Aggregate → HAVING → SELECT → ORDER BY → LIMIT।
Viva Questions
MCQ (উত্তরসহ)
ক) WHERE খ) HAVING গ) ORDER BY ঘ) LIMIT
Practice Problems
১) প্রতিটা শহরে মোট কাস্টমার সংখ্যা বের করো। ২) প্রতিটা ডিপার্টমেন্টের গড় বেতন বের করো, শুধু ৫-এর বেশি কর্মী আছে এমন ডিপার্টমেন্ট দেখাও। ৩) প্রতিটা ক্যাটাগরির সর্বোচ্চ ও সর্বনিম্ন দাম একই কোয়েরিতে বের করো।
হোমওয়ার্ক অ্যাসাইনমেন্ট
একটা Bank Database ডিজাইন করো (Accounts: Branch, Balance, Customer_Name)। প্রতিটা শাখার মোট ডিপোজিট, গড় ব্যালেন্স, এবং কাস্টমার সংখ্যা বের করার তিনটা ভিন্ন GROUP BY কোয়েরি লেখো।
কাগজের রেজিস্টার থেকে ইনস্ট্যান্ট সামারি রিপোর্ট
SQL আসার আগে, ব্যবসা প্রতিষ্ঠানগুলো ক্যালকুলেটর ও কাগজের রেজিস্টার দিয়ে ম্যানুয়ালি রিপোর্ট সামারি করতো — প্রতিটা বিভাগের মোট বিক্রি হাতে যোগ করে বের করতে সপ্তাহ লেগে যেতো। ১৯৭০-এর দশকে Relational Database এবং SQL তৈরি হওয়ার পর, GROUP BY এই পুরো প্রক্রিয়াটাকে বিপ্লবী পরিবর্তন এনে দেয় — যেখানে হিসাবরক্ষকের দিনের পর দিন লাগতো, সেখানে আজ একটা GROUP BY কোয়েরি কোটি কোটি রেকর্ড থেকে সামারি রিপোর্ট তৈরি করে দেয় কয়েক সেকেন্ডে। এটাই আধুনিক Business Analytics এবং Reporting-এর মূল ভিত্তি।
GROUP BY কেন SELECT-এর আগে ঘটে
GROUP BY এবং তার Aggregate হিসাব SELECT-এর আগেই সম্পন্ন হয় — এই কারণেই HAVING-এ Aggregate Function ব্যবহার করা যায় (SELECT-এ Alias এখনো তৈরি না হলেও, ইঞ্জিন ভেতরে ভেতরে Aggregate ভ্যালু হিসাব করে ফেলেছে), কিন্তু WHERE-এ যায় না, কারণ WHERE এক্সিকিউট হয় GROUP BY-এর আগেই।
Raw Records → Business Decision
সাতটি গুরুত্বপূর্ণ তুলনা টেবিল
1. GROUP BY vs ORDER BY
| দিক | GROUP BY | ORDER BY |
|---|---|---|
| উদ্দেশ্য | দলবদ্ধ করে সামারি তৈরি | রেকর্ড সাজানো |
| রো সংখ্যা | কমে যায় | একই থাকে |
2. GROUP BY vs DISTINCT
| দিক | GROUP BY | DISTINCT |
|---|---|---|
| উদ্দেশ্য | দলবদ্ধ করে Aggregate হিসাব করা | শুধু ডুপ্লিকেট বাদ দেওয়া |
| Aggregate Function | ব্যবহার করা যায় | একা ব্যবহার হয় না |
3. WHERE vs HAVING
| দিক | WHERE | HAVING |
|---|---|---|
| কাজ করে | দলবদ্ধ হওয়ার আগে | দলবদ্ধ হওয়ার পরে |
4. COUNT() vs SUM()
| দিক | COUNT() | SUM() |
|---|---|---|
| কী করে | রো সংখ্যা গোনে | মান যোগ করে |
5. AVG() vs MAX()
| দিক | AVG() | MAX() |
|---|---|---|
| কী করে | গড় বের করে | সর্বোচ্চ মান বের করে |
6. MAX() vs MIN()
| দিক | MAX() | MIN() |
|---|---|---|
| কী করে | সর্বোচ্চ মান | সর্বনিম্ন মান |
| উদাহরণ | সর্বোচ্চ বেতন | সর্বনিম্ন দাম |
7. Single-column vs Multi-column GROUP BY
| দিক | Single-column | Multi-column |
|---|---|---|
| উদাহরণ | GROUP BY Department | GROUP BY Department, Gender |
E-commerce Sales Analytics System
-- ১. Sales by Category SELECT Category, SUM(Amount) AS Total_Sales FROM Sales GROUP BY Category; -- ২. Revenue by Brand SELECT Brand, SUM(Amount) AS Revenue FROM Sales GROUP BY Brand; -- ৩. Orders by City SELECT City, COUNT(*) AS Total_Orders FROM Sales GROUP BY City; -- ৪. Monthly Sales Report SELECT MONTH(Sale_Date) AS Month, SUM(Amount) AS Total FROM Sales GROUP BY MONTH(Sale_Date); -- ৫. Average Product Price SELECT Category, AVG(Price) AS Avg_Price FROM Products GROUP BY Category; -- ৬. Highest Revenue Category SELECT Category, SUM(Amount) AS Revenue FROM Sales GROUP BY Category ORDER BY Revenue DESC LIMIT 1; -- ৭. Department-wise Employee Summary SELECT Department, COUNT(*) AS Total_Employees, AVG(Salary) AS Avg_Salary FROM Employees GROUP BY Department;
বিভিন্ন রোলে GROUP BY-এর দৈনন্দিন ব্যবহার
| রোল | দৈনন্দিন ব্যবহার |
|---|---|
| Data Analyst | মাসিক সেলস রিপোর্ট, সেগমেন্ট বিশ্লেষণ |
| BI Engineer | ড্যাশবোর্ডে "Sales by Region"-এর মতো উইজেট তৈরি |
| Data Scientist | ফিচার ইঞ্জিনিয়ারিং-এ গ্রুপ-ভিত্তিক এগ্রিগেট ফিচার তৈরি |
| Finance Team | বিভাগ/প্রজেক্ট অনুযায়ী বাজেট বনাম প্রকৃত খরচ সামারি |
| HR Team | ডিপার্টমেন্ট অনুযায়ী বেতন ও কর্মী সংখ্যা বিশ্লেষণ |
| Marketing Analyst | কাস্টমার সেগমেন্ট অনুযায়ী ক্যাম্পেইন পারফরম্যান্স বিশ্লেষণ |
| Database Administrator | ভারী GROUP BY কোয়েরির পারফরম্যান্স মনিটর ও অপ্টিমাইজ |
লক্ষ লক্ষ রো GROUP BY করা কেন ব্যয়বহুল
| কনসেপ্ট | সহজ ব্যাখ্যা |
|---|---|
| Indexing | যে কলামে বারবার GROUP BY হয়, সেখানে Index থাকলে দলবদ্ধ করা দ্রুত হয় |
| WHERE দিয়ে আগে ফিল্টার | GROUP BY করার আগে অপ্রয়োজনীয় রো বাদ দিলে কম ডেটা প্রসেস হয় |
| অপ্রয়োজনীয় গ্রুপিং কলাম এড়িয়ে চলা | বেশি কলামে GROUP BY করলে বেশি ইউনিক গ্রুপ তৈরি হয়, যা ধীর করে |
| Execution Plan (প্রাথমিক ধারণা) | EXPLAIN SELECT ... দিয়ে ডেটাবেস কীভাবে কোয়েরি চালাবে তা আগে থেকে দেখা যায় |
ক্লাসে সরাসরি করার মতো ছোট ভিজ্যুয়াল অ্যাক্টিভিটি
Top 30 SQL GROUP BY ইন্টারভিউ প্রশ্ন
প্রতিটা প্রশ্নের সাথে সংক্ষিপ্ত উত্তর ও বাস্তব ব্যবহার-ক্ষেত্র দেওয়া আছে।
| # | প্রশ্ন | সংক্ষিপ্ত উত্তর / ব্যবহার-ক্ষেত্র |
|---|---|---|
| 01 | GROUP BY কী? | একই মান থাকা রো-গুলোকে দলবদ্ধ করে সামারি তৈরির ক্লজ। |
| 02 | GROUP BY কেন Aggregate Function-এর সাথে লাগে? | প্রতিটা দলের জন্য একটা অর্থপূর্ণ সংখ্যা বের করতে। |
| 03 | COUNT() কী করে? | রো সংখ্যা গোনে। ব্যবহার: মোট কাস্টমার সংখ্যা। |
| 04 | SUM() কী করে? | যোগফল বের করে। ব্যবহার: মোট বিক্রি। |
| 05 | AVG() কী করে? | গড় বের করে। ব্যবহার: গড় বেতন। |
| 06 | MAX() vs MIN()? | সর্বোচ্চ vs সর্বনিম্ন মান। |
| 07 | WHERE vs HAVING মূল পার্থক্য? | WHERE আগে রো ফিল্টার করে, HAVING পরে গ্রুপ ফিল্টার করে। |
| 08 | HAVING-এ Aggregate কেন ব্যবহার করা যায়? | Aggregate হিসাবের পরে HAVING কাজ করে বলে। |
| 09 | SELECT-এর কলাম GROUP BY-তে না থাকলে? | Error অথবা অনির্দিষ্ট ফলাফল। |
| 10 | GROUP BY ছাড়া Aggregate ব্যবহার করা যায়? | হ্যাঁ, তখন পুরো টেবিলের একটামাত্র সামারি আসে। |
| 11 | একাধিক কলামে GROUP BY করলে কী হয়? | ধাপে ধাপে বড় দল থেকে উপ-দলে ভাগ হয়। |
| 12 | GROUP BY কি ফলাফল সাজায়? | না, সাজাতে ORDER BY লাগে। |
| 13 | এক্সিকিউশন অর্ডারে GROUP BY কোথায়? | WHERE-এর পরে, HAVING ও SELECT-এর আগে। |
| 14 | COUNT(*) vs COUNT(column)? | COUNT(*) সব রো গোনে; COUNT(column) শুধু NULL নয় এমন মান গোনে। |
| 15 | COUNT(DISTINCT column) কী করে? | শুধু ইউনিক মান গোনে। |
| 16 | GROUP BY কি NULL-কে আলাদা গ্রুপ ধরে? | হ্যাঁ, সাধারণত একটা আলাদা গ্রুপ হিসেবে। |
| 17 | GROUP BY-এর সাথে ORDER BY ব্যবহার করা যায়? | হ্যাঁ — সামারি ফলাফলকেও সাজানো যায়। |
| 18 | Leaderboard/Top N-এ GROUP BY কীভাবে লাগে? | GROUP BY দিয়ে সামারি, তারপর ORDER BY + LIMIT দিয়ে শীর্ষ কয়েকটা। |
| 19 | WHERE-এ Aggregate লিখলে কী হয়? | Syntax Error — এর জন্য HAVING লাগে। |
| 20 | GROUP BY কি বড় টেবিলে ধীর হতে পারে? | হ্যাঁ, বিশেষত বেশি ইউনিক গ্রুপ ও ইনডেক্স না থাকলে। |
| 21 | Index কীভাবে GROUP BY দ্রুত করে? | ডেটা আংশিকভাবে আগে থেকেই সাজানো থাকায় নতুন স্ক্যান কম লাগে। |
| 22 | GROUP BY vs DISTINCT পার্থক্য? | DISTINCT শুধু ডুপ্লিকেট বাদ দেয়; GROUP BY-এর সাথে Aggregate হিসাবও করা যায়। |
| 23 | "Average order value" বের করতে কী লাগবে? | AVG(Order_Amount), প্রয়োজনে GROUP BY কাস্টমার/অঞ্চল অনুযায়ী। |
| 24 | GROUP BY-তে Expression ব্যবহার করা যায়? | হ্যাঁ, যেমন GROUP BY YEAR(Order_Date)। |
| 25 | একজন Data Analyst কেন প্রতিদিন GROUP BY ব্যবহার করে? | সেলস, কাস্টমার, পারফরম্যান্স রিপোর্টে সামারি ইনসাইট দরকার হয় বলে। |
| 26 | HAVING ছাড়া গ্রুপ ফলাফল ফিল্টার করা যায়? | Subquery/CTE দিয়েও সম্ভব, কিন্তু HAVING সহজ ও সরাসরি। |
| 27 | GROUP BY-এর সবচেয়ে সাধারণ ভুল কী? | GROUP BY-তে নেই এমন non-aggregate কলাম SELECT করা। |
| 28 | KPI ড্যাশবোর্ডে GROUP BY কীভাবে সাহায্য করে? | প্রতিটা বিভাগ/অঞ্চল/সময়ের মূল মেট্রিক্স সামারি করে ভিজ্যুয়ালাইজ করার উপযোগী করে। |
| 29 | GROUP BY vs Window Function (প্রাথমিক)? | GROUP BY রো সংখ্যা কমিয়ে সামারি দেয়; Window Function প্রতিটা রো রেখে অতিরিক্ত হিসাব যোগ করে। |
| 30 | GROUP BY লেখার আগে সবচেয়ে গুরুত্বপূর্ণ প্রশ্ন কী? | "বিজনেস কোন কলাম অনুযায়ী ভাগ করা সামারি চায়, আর কোন Aggregate Function সঠিক উত্তর দেবে?" |