বিবৃতি দ্বারা SQL গ্রুপ সম্পর্কে আপনার যা জানা দরকার

বিবৃতি দ্বারা SQL গ্রুপ সম্পর্কে আপনার যা জানা দরকার

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





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





ক্লজ বাই গ্রুপ কি করে?

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





এইচপি ল্যাপটপ টাচপ্যাড উইন্ডোজ 7 এ কাজ করছে না

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

+----+---------------------------+-----------+--------------+-------+
| 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 |
+----+---------------+

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

একক কলাম দ্বারা গ্রুপিং

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





SELECT artist_id FROM albums

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

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

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





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 একটি সমষ্টিগত ফাংশন। এই শব্দটি এমন ফাংশনগুলিকে বোঝায় যা একাধিক সারি থেকে মানগুলিকে একক মানের মধ্যে অনুবাদ করে। এগুলি প্রায়শই GROUP BY স্টেটমেন্টের সাথে ব্যবহার করা হয়।

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

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 |
+-----------+-------+

একাধিক কলাম দ্বারা গ্রুপিং

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

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 () গড় গড় প্রদান করে। এটি SUM () / COUNT () এর সমতুল্য।

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

কিভাবে ইউটিউবে কারো সাথে যোগাযোগ করবেন
SELECT AVG(sales) FROM albums
+------------+
| AVG(sales) |
+------------+
| 19.1111 |
+------------+

WHERE ক্লজ সহ GROUP BY ব্যবহার করা

একটি সাধারণ SELECT এর মতো, আপনি এখনও ফলাফল সেট ফিল্টার করতে 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 থেকে স্বাধীনভাবে WHERE ক্লজ এর সাথে একটি যোগদান ব্যবহার করতে পারেন:

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 ক্লজটি GROUP BY এর পরে আসে। অন্যথায়, এটি মূলত যেখানে আছে তার সাথে একটি সহজ প্রতিস্থাপন। ফলাফল হল:

+------------+--------+
| 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 |
+-------+--------+

GROUP BY এর সাথে ফলাফল একত্রিত করা

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

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

শেয়ার করুন শেয়ার করুন টুইট ইমেইল এসকিউএল যোগদান করার সাথে সাথে একাধিক ডেটাবেস টেবিলগুলি কীভাবে জিজ্ঞাসা করবেন

এসকিউএল জয়েনগুলি কীভাবে প্রশ্নগুলি প্রবাহিত করতে, সময় বাঁচাতে এবং আপনাকে এসকিউএল পাওয়ার ব্যবহারকারীর মতো অনুভব করতে শিখুন।

পুরানো টেক্সট মেসেজ কিভাবে দেখবেন
পরবর্তী পড়ুন সম্পর্কিত বিষয়
  • প্রোগ্রামিং
  • এসকিউএল
লেখক সম্পর্কে ববি জ্যাক(58 নিবন্ধ প্রকাশিত)

ববি একজন প্রযুক্তি উত্সাহী যিনি দুই দশকের বেশিরভাগ সময় সফটওয়্যার ডেভেলপার হিসেবে কাজ করেছেন। তিনি গেমিং সম্পর্কে উত্সাহী, সুইচ প্লেয়ার ম্যাগাজিনে রিভিউ এডিটর হিসাবে কাজ করছেন এবং অনলাইন প্রকাশনা এবং ওয়েব ডেভেলপমেন্টের সকল দিকের মধ্যে নিমজ্জিত।

ববি জ্যাক থেকে আরো

আমাদের নিউজলেটার সদস্যতা

প্রযুক্তি টিপস, রিভিউ, ফ্রি ইবুক এবং এক্সক্লুসিভ ডিলের জন্য আমাদের নিউজলেটারে যোগ দিন!

সাবস্ক্রাইব করতে এখানে ক্লিক করুন