একটি টেবিলের কলাম অনুযায়ী গ্রুপ করে নতুন টেবিল তৈরি করতে CREATE TABLE AS SELECT ব্যবহার করুন। প্রথম টেবিল (DemoTable1):
mysql> CREATE TABLE DemoTable1 (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
CountryName VARCHAR(20)
);
mysql> INSERT INTO DemoTable1(CountryName) VALUES('US'), ('UK'), ('AUS'), ('UK'), ('UK'), ('US'), ('AUS');
সকল রেকর্ড দেখতে:
mysql> SELECT * FROM DemoTable1;
আউটপুট:
+----+-------------+ | Id | CountryName | +----+-------------+ | 1 | US | | 2 | UK | | 3 | AUS | | 4 | UK | | 5 | UK | | 6 | US | | 7 | AUS | +----+-------------+
CountryName অনুযায়ী গ্রুপ করে নতুন টেবিল (DemoTable2) তৈরি করা:
mysql> CREATE TABLE DemoTable2 AS SELECT * FROM DemoTable1 GROUP BY CountryName; Query OK, 3 rows affected (0.79 sec)
নতুন টেবিল চেক করুন:
mysql> SELECT * FROM DemoTable2;
আউটপুট:
+----+-------------+ | Id | CountryName | +----+-------------+ | 1 | US | | 2 | UK | | 3 | AUS | +----+-------------+
ব্যাখ্যা:
CREATE TABLE DemoTable2 AS SELECT ...: SELECT কোয়েরির ফলাফল থেকে নতুন টেবিল তৈরি করে (ডেটা + কোলাম ডেফিনিশন)।GROUP BY CountryName: একই দেশের সারি গুলো এক করল (প্রথম এনকাউন্টার রেখে)।- Id কলামও কপি হয়েছে (প্রথম সারির Id)।
সতর্কতা: GROUP BY দিয়ে SELECT * ব্যবহার করা MySQL-এ অনুমোদিত (ONLY_FULL_GROUP_BY অফ থাকলে), কিন্তু অনির্ধারিত ফলাফল দেয় (কোন সারির Id নেবে বলে নিশ্চিত নয়)। সেরা অভ্যাস: SELECT MIN(Id) AS Id, CountryName FROM DemoTable1 GROUP BY CountryName ব্যবহার করুন।
ইনডেক্স/কনস্ট্রেইন্ট: নতুন টেবিলে প্রাইমারি কি, ইনডেক্স, অটো_ইনক্রিমেন্ট কপি হয় না। আলাদা করে যোগ করতে হয়।