MySQL-এ কোনো কলামে দুইবারও অধিক (আর্থাৎ ৩ বা তার বেশি বার) চলে আসা মান বের করতে GROUP BY এবং HAVING COUNT(*) > 2 ব্যবহার করা হয়।
টেবিল তৈরি এবং ডেটা ইনসার্ট
mysql> CREATE TABLE DemoTable (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Subject VARCHAR(100)
-> );
Query OK, 0 rows affected (0.53 sec)
mysql> INSERT INTO DemoTable(Subject) VALUES('MySQL');
mysql> INSERT INTO DemoTable(Subject) VALUES('MongoDB');
mysql> INSERT INTO DemoTable(Subject) VALUES('MySQL');
mysql> INSERT INTO DemoTable(Subject) VALUES('Java');
mysql> INSERT INTO DemoTable(Subject) VALUES('SQL Server');
mysql> INSERT INTO DemoTable(Subject) VALUES('MongoDB');
mysql> INSERT INTO DemoTable(Subject) VALUES('MySQL');
সব রেকর্ড দেখানো
mysql> SELECT * FROM DemoTable;
আউটপুট
+----+------------+ | Id | Subject | +----+------------+ | 1 | MySQL | | 2 | MongoDB | | 3 | MySQL | | 4 | Java | | 5 | SQL Server | | 6 | MongoDB | | 7 | MySQL | +----+------------+ 7 rows in set (0.00 sec)
২-এর অধিক ঘনত্ব والے Subject বের করা
mysql> SELECT Subject, COUNT(Subject) AS freq
-> FROM DemoTable
-> GROUP BY Subject
-> HAVING COUNT(Subject) > 2;
আউটপুট
+---------+------+ | Subject | freq | +---------+------+ | MySQL | 3 | +---------+------+ 1 row in set (0.00 sec)
ব্যাখ্যা: GROUP BY Subject সমান Subject-वाले রো গ্রুপ করে। COUNT(Subject) প্রতিটি গ্রুপের রো সংখ্যা গণনা করে। HAVING COUNT(Subject) > 2 শুধু ৩ বা তার বেশি ঘনত্ব वाले গ্রুপ রাখে। MySQL ৩ বার চলে এলো, MongoDB ২ বার (বাদ পড়েছে)।
নোট: WHERE গ্রুপিং-এর আগে ফিল্টার করে, HAVING গ্রুপিং-এর পরে ফিল্টার করে। এggregate ফাংশন (COUNT, SUM ইত্যাদি) WHERE-এ ব্যবহার করা যায় না।