HAVING ক্লজ GROUP BY-এর পরে গ্রুপে ফিল্টার लगাতে ব্যবহৃত হয়। WHERE রো-লেভেল ফিল্টার, HAVING গ্রুপ-লেভেল ফিল্টার।
সিনট্যাক্স
SELECT column_name FROM yourTableName GROUP BY column_name HAVING AGGREGATE_FUNCTION(column_name) operator value;
উদাহরণ
টেবিল ও ডেটা:
CREATE TABLE WhereAfterGroupDemo (
UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserProcess INT,
UserThreadId INT
);
INSERT INTO WhereAfterGroupDemo (UserProcess, UserThreadId) VALUES
(1211, 3), (1412, 3), (1510, 4), (1511, 4);
কোয়েরি: UserThreadId গ্রুপ করে যেখানে MAX(UserProcess) < 1510
SELECT UserThreadId FROM WhereAfterGroupDemo GROUP BY UserThreadId HAVING MAX(UserProcess) < 1510;
আউটপুট
+--------------+ | UserThreadId | +--------------+ | 3 | +--------------+
ব্যাখ্যা
- Thread 3: Process 1211, 1412 → MAX = 1412 (< 1510) ✓
- Thread 4: Process 1510, 1511 → MAX = 1511 (≥ 1510) ✗
WHERE vs HAVING
| WHERE | HAVING |
|---|---|
| গ্রুপিং আগে ফিল্টার | গ্রুপিং পর ফিল্টার |
| এগ্রিগেট ফাংশন ব্যবহার 불가 | এগ্রিগেট ফাংশন ব্যবহার যোগ্য |
| ইন্ডেক্স ব্যবহার করে | ইন্ডেক্স ব্যবহার করে না (সাধারণত) |