MySQL-এ GROUP BY এবং HAVING ক্লজ ব্যবহার করে প্রতিটি প্রোডাক্টের গড় দাম (average price) নির্দিষ্ট মানের চেয়ে কম কিনা তা যাচাই করা যায়।
উদাহরণ: টেবিল তৈরি এবং ডেটা ইনসার্ট
mysql> create table DemoTable848(
ProductId int,
ProductPrice int
);
Query OK, 0 rows affected (1.20 sec)
mysql> insert into DemoTable848 values(100,30); Query OK, 1 row affected (0.57 sec) mysql> insert into DemoTable848 values(101,50); Query OK, 1 row affected (1.06 sec) mysql> insert into DemoTable848 values(100,40); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable848 values(101,25); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable848 values(100,20); Query OK, 1 row affected (0.31 sec)
সকল রেকর্ড দেখানো
mysql> select * from DemoTable848;
+-----------+--------------+ | ProductId | ProductPrice | +-----------+--------------+ | 100 | 30 | | 101 | 50 | | 100 | 40 | | 101 | 25 | | 100 | 20 | +-----------+--------------+ 5 rows in set (0.00 sec)
গড় দাম ৩৫-এর চেয়ে কম olan প্রোডাক্ট বের করা
mysql> select ProductId, avg(ProductPrice) from DemoTable848 group by ProductId having AVG(ProductPrice) < 35;
+-----------+-------------------+ | ProductId | avg(ProductPrice) | +-----------+-------------------+ | 100 | 30.0000 | +-----------+-------------------+ 1 row in set (0.00 sec)
ব্যাখ্যা
GROUP BY ProductId- প্রতিটি প্রোডাক্টের জন্য গোষ্ঠীAVG(ProductPrice)- প্রতিটি গোষ্ঠীর গড় দামHAVING AVG(ProductPrice) < 35- গড় ৩৫-এর চেয়ে কম olan গোষ্ঠী ফিল্টার- ProductId 100: (30+40+20)/3 = 30 ✓
- ProductId 101: (50+25)/2 = 37.5 ✗
WHERE vs HAVING পার্থক্য
| ক্লজ | সময় | ফিল্টার | এগ্রিগেট ফাংশন |
|---|---|---|---|
WHERE | গ্রুপিং-এর আগে | রো লেভেল | নहीं |
HAVING | গ্রুপিং-এর পরে | গ্রুপ লেভেল | হ্যাঁ |