বিবৃতি অনুসারে এসকিউএল গ্রুপ সম্পর্কে আপনার যা জানা দরকার

রিলেশনাল ডাটাবেসের শক্তি অনেকাংশে ডেটা ফিল্টার করে এবং একসাথে টেবিলগুলিতে যোগদান করে। এই কারণেই আমরা সেই সম্পর্কগুলিকে প্রথম স্থানে প্রতিনিধিত্ব করি। তবে আধুনিক ডাটাবেস সিস্টেমগুলি আরও একটি মূল্যবান কৌশল সরবরাহ করে: গ্রুপিং।

দলবদ্ধকরণ আপনাকে একটি ডাটাবেস থেকে সারাংশের তথ্য বের করার অনুমতি দেয়। এটি আপনাকে কার্যকর পরিসংখ্যানগত ডেটা তৈরি করতে ফলাফলগুলি একত্রিত করতে দেয়। গোষ্ঠীভুক্তকরণ পরিসংখ্যানের গড় তালিকা হিসাবে যেমন সাধারণ ক্ষেত্রে আপনার কোড লিখন থেকে বাঁচায়। এবং এটি আরও দক্ষ সিস্টেমের জন্য তৈরি করতে পারে।

ক্লজ দ্বারা গ্রুপ কী করে?

নাম অনুসারে গ্রুপটি গোষ্ঠীগুলির ফলাফলকে একটি ছোট সেট করে। গোষ্ঠীযুক্ত কলামের প্রতিটি স্বতন্ত্র মানের জন্য ফলাফলগুলিতে একটি সারি থাকে। সারি সহ কয়েকটি সাধারণ মান ভাগ করে নেওয়ার জন্য আমরা কিছু নমুনা ডেটা দেখে এর ব্যবহারটি প্রদর্শন করতে পারি।

রেকর্ড অ্যালবাম উপস্থাপন করে দুটি টেবিল সহ নিম্নলিখিতটি একটি খুব সাধারণ ডাটাবেস। আপনি আপনার নির্বাচিত ডাটাবেস সিস্টেমের জন্য একটি প্রাথমিক স্কিমা লিখে এই জাতীয় ডেটাবেস সেট আপ করতে পারেন। অ্যালবাম টেবিলটিতে নাম, শিল্পী, মুক্তির বছর, এবং বিক্রয়ের জন্য একটি প্রাথমিক কী আইডি কলাম এবং কলাম সহ নয় টি সারি রয়েছে:

 +----+---------------------------+-----------+--------------+-------+
| id | name | artist_id | release_year | sales |
+----+---------------------------+-----------+--------------+-------+
| 1 | Abbey Road | 1 | 1969 | 14 |
| 2 | The Dark Side of the Moon | 2 | 1973 | 24 |
| 3 | Rumours | 3 | 1977 | 28 |
| 4 | Nevermind | 4 | 1991 | 17 |
| 5 | Animals | 2 | 1977 | 6 |
| 6 | Goodbye Yellow Brick Road | 5 | 1973 | 8 |
| 7 | 21 | 6 | 2011 | 25 |
| 8 | 25 | 6 | 2015 | 22 |
| 9 | Bat Out of Hell | 7 | 1977 | 28 |
+----+---------------------------+-----------+--------------+-------+

শিল্পীদের টেবিলটি আরও সহজ। এটিতে আইডি এবং নাম কলাম সহ সাতটি সারি রয়েছে:

 +----+---------------+
| id | name |
+----+---------------+
| 1 | The Beatles |
| 2 | Pink Floyd |
| 3 | Fleetwood Mac |
| 4 | Nirvana |
| 5 | Elton John |
| 6 | Adele |
| 7 | Meat Loaf |
+----+---------------+

আপনি কেবলমাত্র একটি সাধারণ ডেটা সেট হিসাবে গ্রুপের বিভিন্ন দিক বুঝতে পারবেন। অবশ্যই, একটি বাস্তব-জীবন ডেটা সেটটিতে অনেকগুলি, আরও অনেক সারি থাকবে তবে নীতিগুলি একই থাকে remain

একটি একক কলাম দ্বারা দলবদ্ধকরণ

আসুন ধরা যাক আমরা প্রতিটি শিল্পীর জন্য আমাদের কতটি অ্যালবাম রয়েছে তা জানতে চাই। আর্টিস্ট_আইডি কলামটি আনতে একটি সাধারণ SELECT ক্যোয়ারী দিয়ে শুরু করুন :

 SELECT artist_id FROM albums

প্রত্যাশামত এটি সমস্ত নয়টি সারি ফিরিয়ে দেয়:

 +-----------+
| artist_id |
+-----------+
| 1 |
| 2 |
| 3 |
| 4 |
| 2 |
| 5 |
| 6 |
| 6 |
| 7 |
+-----------+

শিল্পীর দ্বারা এই ফলাফলগুলিকে গোষ্ঠী করতে, শিল্পী_ GYUP BY বাক্যাংশ যুক্ত করুন :

 SELECT artist_id FROM albums GROUP BY artist_id

যা নিম্নলিখিত ফলাফল দেয়:

 +-----------+
| artist_id |
+-----------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
+-----------+

ফলাফল সেটটিতে সাতটি সারি রয়েছে, এটি অ্যালবামের টেবিলের মোট নয়টি থেকে কমেছে। প্রতিটি অনন্য শিল্পী_আইডির একক সারি থাকে। শেষ অবধি, প্রকৃত গণনাগুলি পেতে, নির্বাচিত কলামগুলিতে COUNT (*) যুক্ত করুন :

 SELECT artist_id, COUNT(*)
FROM albums
GROUP BY artist_id
+-----------+----------+
| artist_id | COUNT(*) |
+-----------+----------+
| 1 | 1 |
| 2 | 2 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
| 6 | 2 |
| 7 | 1 |
+-----------+----------+

ফলাফলগুলি আইডিস 2 এবং 6 সহ শিল্পীদের জন্য দুটি জোড়া সারি গ্রুপ করে। আমাদের ডাটাবেসে প্রত্যেকের দুটি করে অ্যালবাম রয়েছে।

সম্পর্কিত: প্রারম্ভিকদের জন্য জরুরী এসকিউএল কমান্ড চিট শীট

সমষ্টিগত ফাংশন সহ গ্রুপযুক্ত ডেটা কীভাবে অ্যাক্সেস করবেন

আপনি সম্ভবত পূর্বে COUNT টি ফাংশন ব্যবহার করেছেন, বিশেষত COUNT (*) ফর্মটিতে উপরে উল্লিখিত হিসাবে। এটি একটি সেটে ফলাফলের সংখ্যা নিয়ে আসে। আপনি একটি টেবিলের মোট রেকর্ডের সংখ্যা পেতে এটি ব্যবহার করতে পারেন:

 SELECT COUNT(*) FROM albums
+----------+
| COUNT(*) |
+----------+
| 9 |
+----------+

COUNT হ'ল একটি সামগ্রিক ফাংশন। এই শব্দটি এমন ফাংশনগুলিকে বোঝায় যা একাধিক সারি থেকে মানগুলিকে একক মানে অনুবাদ করে। এগুলি প্রায়শই গ্রুপ বাই স্টেটমেন্টের সাথে একত্রে ব্যবহৃত হয়।

সারিগুলির সংখ্যা গণনা করার পরিবর্তে আমরা গোষ্ঠীভুক্ত মানগুলিতে একটি সামগ্রিক ফাংশন প্রয়োগ করতে পারি:

 SELECT artist_id, SUM(sales)
FROM albums
GROUP BY artist_id
+-----------+------------+
| artist_id | SUM(sales) |
+-----------+------------+
| 1 | 14 |
| 2 | 30 |
| 3 | 28 |
| 4 | 17 |
| 5 | 8 |
| 6 | 47 |
| 7 | 28 |
+-----------+------------+

2 এবং 6 শিল্পীদের উপরে উপরে প্রদর্শিত মোট বিক্রয়টি হল তাদের একাধিক অ্যালবামের বিক্রয় সম্মিলিত:

 SELECT artist_id, sales
FROM albums
WHERE artist_id IN (2, 6)
+-----------+-------+
| artist_id | sales |
+-----------+-------+
| 2 | 24 |
| 2 | 6 |
| 6 | 25 |
| 6 | 22 |
+-----------+-------+

একাধিক কলাম দ্বারা গোষ্ঠীকরণ

আপনি একাধিক কলাম দ্বারা গ্রুপ করতে পারেন। কমা দ্বারা পৃথককৃত একাধিক কলাম বা ভাব প্রকাশ করুন। ফলাফলগুলি এই কলামগুলির সংমিশ্রণ অনুসারে গ্রুপ করবে will

 SELECT release_year, sales, count(*)
FROM albums
GROUP BY release_year, sales

এটি সাধারণত একটি একক কলাম দ্বারা গোষ্ঠীকরণের চেয়ে বেশি ফলাফল আনতে পারে:

 +--------------+-------+----------+
| release_year | sales | count(*) |
+--------------+-------+----------+
| 1969 | 14 | 1 |
| 1973 | 24 | 1 |
| 1977 | 28 | 2 |
| 1991 | 17 | 1 |
| 1977 | 6 | 1 |
| 1973 | 8 | 1 |
| 2011 | 25 | 1 |
| 2015 | 22 | 1 |
+--------------+-------+----------+

মনে রাখবেন যে, আমাদের ছোট উদাহরণে, মাত্র দুটি অ্যালবামে একই প্রকাশের বছর এবং বিক্রয় গণনা রয়েছে (1977 সালে 28)।

কার্যকর সমষ্টিগত কার্যাদি

COUNT বাদে বেশ কয়েকটি ফাংশন GROUP এর সাথে ভাল কাজ করে। প্রতিটি ফাংশন প্রতিটি ফলাফল গ্রুপের সাথে সম্পর্কিত রেকর্ডগুলির উপর ভিত্তি করে একটি মান প্রদান করে।

  • COUNT () মোট মিলের রেকর্ডগুলির সংখ্যাকে প্রদান করে।
  • SUM () প্রদত্ত কলামে সমস্ত মানের যোগ করা সমস্তকে ফেরত দেয়।
  • MIN () প্রদত্ত কলামে ক্ষুদ্রতম মান প্রদান করে।
  • MAX () প্রদত্ত কলামে সর্বাধিক মান প্রদান করে।
  • AVG () গড় গড় প্রদান করে। এটি সম () / COUNT () এর সমতুল্য।

আপনি এই ফাংশনগুলি গ্রোপ ধারা ছাড়াই ব্যবহার করতে পারেন:

 SELECT AVG(sales) FROM albums
+------------+
| AVG(sales) |
+------------+
| 19.1111 |
+------------+

গোষ্ঠী দায়ের সহ গ্রুপ

একটি সাধারণ নির্বাচন যেমন, আপনি এখনও ফলাফল সেট ফিল্টার করতে WHERE ব্যবহার করতে পারেন:

 SELECT artist_id, COUNT(*)
FROM albums
WHERE release_year > 1990
GROUP BY artist_id
 +-----------+----------+
| artist_id | COUNT(*) |
+-----------+----------+
| 4 | 1 |
| 6 | 2 |
+-----------+----------+

শিল্পীর গোষ্ঠী অনুসারে এখন আপনার কাছে কেবল 1990 এর পরে প্রকাশিত সেই অ্যালবামগুলি রয়েছে। আপনি GROUP BY থেকে স্বতন্ত্রভাবে যেখানে ক্লজটির সাথে একটি যোগদান ব্যবহার করতে পারেন:

 SELECT r.name, COUNT(*) AS albums
FROM albums l, artists r
WHERE artist_id=r.id
AND release_year > 1990
GROUP BY artist_id
 +---------+--------+
| name | albums |
+---------+--------+
| Nirvana | 1 |
| Adele | 2 |
+---------+--------+

নোট, তবে, আপনি যদি একটি সমন্বিত কলামের উপর ভিত্তি করে ফিল্টার করার চেষ্টা করেন:

 SELECT r.name, COUNT(*) AS albums
FROM albums l, artists r
WHERE artist_id=r.id
AND albums > 2
GROUP BY artist_id;

আপনি একটি ত্রুটি পাবেন:

 ERROR 1054 (42S22): Unknown column 'albums' in 'where clause'

সামগ্রিক ডেটা ভিত্তিক কলামগুলি WHERE ধারাটিতে উপলভ্য নয়।

হাভিং ক্লজ

সুতরাং, গ্রুপিংয়ের পরে আপনি কীভাবে ফলাফল সেট ফিল্টার করবেন? HAVING ধারাটি এই প্রয়োজনটির সাথে সম্পর্কিত:

 SELECT r.name, COUNT(*) AS albums
FROM albums l, artists r
WHERE artist_id=r.id
GROUP BY artist_id
HAVING albums > 1;

দ্রষ্টব্য যে HAVING ধারাটি গ্রুপের পরে আসবে। অন্যথায়, এটি মূলত হ্যাভারের সাথে WHERE এর একটি সহজ প্রতিস্থাপন। ফলাফলগুলি হ'ল:

 +------------+--------+
| name | albums |
+------------+--------+
| Pink Floyd | 2 |
| Adele | 2 |
+------------+--------+

আপনি গ্রুপিংয়ের আগে ফলাফলগুলি ফিল্টার করতে এখনও একটি WHERE শর্ত ব্যবহার করতে পারেন। এটি গ্রুপিংয়ের পরে ফিল্টারিংয়ের জন্য একটি HAVING ধারা সাথে একসাথে কাজ করবে:

 SELECT r.name, COUNT(*) AS albums
FROM albums l, artists r
WHERE artist_id=r.id
AND release_year > 1990
GROUP BY artist_id
HAVING albums > 1;

1990 এর পরে আমাদের ডাটাবেসে কেবলমাত্র একজন শিল্পী একাধিক অ্যালবাম প্রকাশ করেছেন:

 +-------+--------+
| name | albums |
+-------+--------+
| Adele | 2 |
+-------+--------+

গ্রুপ দ্বারা ফলাফলের সংমিশ্রণ

গ্রুপ বাই স্টেটমেন্টটি এসকিউএল ভাষার একটি অবিশ্বাস্যভাবে কার্যকর অংশ। উদাহরণস্বরূপ এটি কোনও সামগ্রীর পৃষ্ঠার জন্য ডেটার সংক্ষিপ্ত তথ্য সরবরাহ করতে পারে। এটি প্রচুর পরিমাণে ডেটা আনার একটি দুর্দান্ত বিকল্প। ডাটাবেস এই অতিরিক্ত কাজের চাপকে খুব ভালভাবে পরিচালনা করে কারণ এর নকশা এটি কাজের জন্য অনুকূল করে তোলে।

আপনি যখন গ্রুপিং এবং একাধিক টেবিলগুলিতে কীভাবে যোগদান করবেন তা বুঝতে পারলে আপনি বেশিরভাগই একটি সম্পর্কিত সম্পর্কিত ডাটাবেসের শক্তি ব্যবহার করতে সক্ষম হবেন।