মডিউল পাঠ (1/3)
CTE-এর পরিচিতি (সহ)
CTE-এর পরিচিতি (সহ)
শীঘ্রই বা পরে এটি প্রত্যেকের সাথেই ঘটে: আপনাকে একটি সমষ্টির ফলাফলের উপর ভিত্তি করে ডেটা ফিল্টার করতে হবে, তারপর সেই ফিল্টারটি নিন এবং অন্য একত্রিত প্রশ্নের সাথে এটিতে যোগ দিন। আপনি একটি SELECT এর ভিতরে একটি SELECT লিখতে শুরু করেন, যা পরবর্তীতে আরেকটি SELECT এর FROM এ শেষ হয়।
ফলাফল? স্প্যাগেটি এসকিউএল, একটি প্রশ্ন যা যেকোনো মানুষের জন্য অপঠিত।
CTEs (সাধারণ সারণী অভিব্যক্তি) আপনাকে এই জগাখিচুড়ি মুক্ত করতে দেয়। আপনি এগুলিকে WITH কীওয়ার্ড দিয়ে সক্রিয় করেন, যা আপনাকে অস্থায়ী নামযুক্ত প্রশ্নগুলিকে সংজ্ঞায়িত করতে দেয় এবং তারপরে চূড়ান্ত ক্যোয়ারীতে "ভার্চুয়াল টেবিল" হিসাবে পুনরায় ব্যবহার করতে পারে৷
মৌলিক সিনট্যাক্স
WITH premium_customers AS (
SELECT customer_id, SUM(total_amount) AS total_spent
FROM orders
GROUP BY customer_id
HAVING SUM(total_amount) > 1000
)
SELECT customers.first_name, premium_customers.total_spent
FROM customers
JOIN premium_customers ON customers.id = premium_customers.customer_id;আপনি দেখতে পাচ্ছেন, নীচের মূল প্রশ্নটি premium_customers থেকে পড়ে যেন এটি একটি বাস্তব টেবিল! এবং এটি নেস্টেড সাবকোয়েরির সাথে একটি মেগা অভ্যন্তরীণ যোগদানের চেয়ে অনেক বেশি পাঠযোগ্য।
আমরা খুব দামী পণ্য চাই. 'পণ্য' থেকে 'আইডি' এবং 'দাম' নির্বাচন করতে 'বিলাসী_প্রডাক্টস' নামক একটি CTE ব্যবহার করুন যেখানে 'মূল্য > 500'। তারপর এই CTE-তে একটি প্রধান ক্যোয়ারী চালান এবং সবকিছু দেখান (*)।
ইঙ্গিত দেখান
luxury_products AS (...) দিয়ে শুরু করুন তারপর luxury_products থেকে * নির্বাচন করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
আমরা রিভিউ লেখেন এমন ব্যবহারকারীদের খুঁজে পেতে চাই। একটি CTE 'পর্যালোচক' তৈরি করুন যা 'রিভিউ' থেকে অনন্য (DISTINCT) 'customer_id' মান বের করে। তারপর 'গ্রাহক' টেবিল থেকে 'আইডি', 'প্রথম_নাম', 'শেষ_নাম' বের করুন এবং আইডিতে 'পর্যালোচকদের' CTE-এর সাথে \`JOIN\` করুন।
ইঙ্গিত দেখান
পর্যালোচকদের সাথে AS (রিভিউ থেকে আলাদা গ্রাহক_আইডি নির্বাচন করুন) সিলেক্ট আইডি, প্রথম_নাম, শেষ_নাম গ্রাহকদের থেকে গ্রাহকদের সাথে যোগ দিন customers.id = reviewers.customer_id;
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ