3.1 বিবৃতি দ্বারা গ্রুপ
SQL ভাষা খুবই শক্তিশালী। সাধারণ ডেটা আনার পাশাপাশি, এটি আপনাকে ক্যোয়ারী করার সময় ডেটা গ্রুপ করার অনুমতি দেয়। উদাহরণস্বরূপ, আমরা জানতে চাই যে আমাদের প্রতিটি ব্র্যান্ডের কত ধরণের পণ্য আছে, আমরা কীভাবে তা করতে পারি?
এটির জন্য একটি বিশেষ অপারেটর রয়েছে GROUP BY
, এটি কীভাবে লেখা হয় তা এখানে।
GROUP BY column
আসুন একটি প্রশ্ন লিখি যা SQL কে প্রতিটি ব্র্যান্ডের জন্য পণ্যের প্রকারের সংখ্যা প্রদর্শন করতে বলে। এই ধরনের অনুরোধ এই মত কিছু দেখতে হবে:
SELECT brand, COUNT(*)
FROM product
GROUP BY brand
আপনি নিম্নলিখিত প্রশ্নের ফলাফল পাবেন:
ব্র্যান্ড | গণনা(*) |
---|---|
(খালি) | 2 |
বোশ | 4 |
আইকেইএ | 6 |
এলজি | 2 |
স্মার্টফ্লাওয়ার | 1 |
আসুন আমরা কী ধরণের অনুরোধ লিখেছি এবং কী ধরণের ফলাফল পেয়েছি তা সাবধানতার সাথে বিশ্লেষণ করি। ফলস্বরূপ, আমরা দুটি কলাম দেখতে. ব্র্যান্ডের তালিকা সহ প্রথমটি, যা যৌক্তিক। আমরা জোড়ার সেটের মতো কিছু পেতে চেয়েছিলাম "ব্র্যান্ড --> পরিমাণ" ।
দয়া করে মনে রাখবেন যে ব্র্যান্ড নামের মধ্যে একটি শব্দ আছে NULL
। প্রকৃতপক্ষে, আমাদের কাছে সেই ব্র্যান্ডের পণ্য রয়েছে যেখানে এটি লেখা আছে NULL
এবং আমরা সেগুলি এখানে দেখতে পাই। একটু অপ্রত্যাশিত, কিন্তু সহায়ক। আমরা দেখতে পাচ্ছি কতগুলো আনব্র্যান্ডেড পণ্য আছে।
এখন অনুরোধটি ঘনিষ্ঠভাবে দেখে নেওয়া যাক। আমরা প্রতিটি ব্র্যান্ডের পণ্যের সংখ্যা জানতে চেয়েছিলাম, তাই আমরা লিখেছিলাম GROUP BY brand
, এবং SELECT
আমরা লিখেছিলাম ব্র্যান্ড এবং অভিব্যক্তিCOUNT(*)
COUNT(*)
একটি তথাকথিত সমষ্টিগত ফাংশন যা সারিগুলির একটি গ্রুপে সঞ্চালিত হয়। আমাদের ক্ষেত্রে, তিনি কেবল তাদের সংখ্যা গণনা করেন। এই জাতীয় অনেকগুলি ফাংশন রয়েছে এবং আমরা সেগুলিকে একটু পরে দেখব।
3.2 GROUP BY এর সাথে জটিল প্রশ্ন
এখন আসুন একটি প্রশ্ন লিখি যেখানে আমরা প্রথমে 10 এর কম দামের পণ্যগুলি বাতিল করি এবং তারপরে সেগুলিকে গোষ্ঠীভুক্ত করি। এই ধরনের অনুরোধ এই মত কিছু দেখতে হবে:
SELECT brand, COUNT(*)
FROM product
WHERE price > 10
GROUP BY brand
আপনি নিম্নলিখিত প্রশ্নের ফলাফল পাবেন:
ব্র্যান্ড | গণনা(*) |
---|---|
বোশ | 4 |
আইকেইএ | 5 |
এলজি | 2 |
স্মার্টফ্লাওয়ার | 1 |
আমাদের ফলাফলের সারণী থেকে সমস্ত NULL পণ্য অদৃশ্য হয়ে গেছে, কারণ সেগুলি খুব সস্তা ছিল, এবং IKEA পণ্যের সংখ্যা 1 কমেছে৷ 6 থেকে 5 হয়েছে৷
এটি পরামর্শ দেয় যে আপনি প্রথমে WHERE
ফিল্টার করতে পছন্দসই লাইনগুলি প্রয়োগ করুন এবং শুধুমাত্র তারপর ফলাফলে গ্রুপিং প্রয়োগ করুন৷
3.3 ফলাফলের কলামের নাম
যাইহোক, আপনি ফলস্বরূপ কলামগুলির নাম দিতে পারেন। দেখুন সার্ভার কিভাবে নাম সাজেস্ট করেছে count(*)
? এর মোট দিয়ে প্রতিস্থাপন করা যাক। এই ধরনের অনুরোধ এই মত কিছু দেখতে হবে:
SELECT brand, COUNT(*) AS total
FROM product
WHERE price > 10
GROUP BY brand
আপনি নিম্নলিখিত প্রশ্নের ফলাফল পাবেন:
ব্র্যান্ড | মোট |
---|---|
বোশ | 4 |
আইকেইএ | 5 |
এলজি | 2 |
স্মার্টফ্লাওয়ার | 1 |
আপনি বিদ্যমান কলামগুলির নাম পরিবর্তন করতে পারেন। পূর্বে ব্যবহৃত প্রশ্নগুলির মধ্যে একটি নিন এবং কলামগুলিতে নতুন নাম যোগ করুন।
SELECT
id AS product_id,
name AS product_name,
price
FROM product
WHERE price < 20 AND brand IS NOT NULL
আপনি নিম্নলিখিত প্রশ্নের ফলাফল পাবেন:
পণ্য আইডি | পণ্যের নাম | মূল্য |
---|---|---|
2 | চেয়ার | ৫.০০ |
8 | বাতি | 15.00 |