মডিউল পাঠ (2/3)
একাধিক এবং শৃঙ্খলিত CTE
একাধিক এবং চেইনড CTE
আপনি যখন বেশ কয়েকটিকে একসাথে চেইন করেন তখন WITH এক্সপ্রেশনের কমনীয়তা সত্যিই উজ্জ্বল হয়। আপনি একটি সারিতে অনেক CTE সংজ্ঞায়িত করতে পারেন, একটি কমা দিয়ে আলাদা করে।
এবং এখানে এমন কিছু যা রিফ্যাক্টরিং পিউরিস্টরা পছন্দ করে: পরবর্তীতে CTEs আগের CTEs থেকে ডেটা পড়তে পারে, অনুক্রমিক গণনাগুলি টুকরো টুকরো করে আনপ্যাক করে!
মাল্টি-সিটিই উদাহরণ
WITH premium_customers AS (
SELECT customer_id, SUM(total_amount) AS total_spent
FROM orders
GROUP BY customer_id
),
top_customers AS (
SELECT * FROM premium_customers
WHERE total_spent > 5000
)
SELECT c.first_name, tc.total_spent
FROM customers c
JOIN top_customers tc ON c.id = tc.customer_id;এটা ব্লক-স্টাইল প্রোগ্রামিং! প্রতিটি ব্লক মাত্র একটি কাজ করে।
দুটি অনুক্রমিক CTE-কে সংজ্ঞায়িত করুন: \n1) 'order_totals' গণনা করে 'customer_id' এবং 'order_count' ব্যবহার করে 'COUNT(*)` ব্যবহার করে 'orders' থেকে।\n2) 'gold_users' পড়ে 'order_totals' ফিল্টারিং গ্রাহকদের 'order_custotal' দিয়ে 'Order_count' করতে পারবেন > IN=2. ('first_name' এবং 'last_name') 'gold_users' (ON c.id = g.customer_id) সহ, এবং তাদের 'order_count' দেখান।
ইঙ্গিত দেখান
আলাদা অর্ডার_টোটাল এবং স্বর্ণ_ব্যবহারকারীকে কমা দিয়ে (কোন সেকেন্ডের সাথে নয়!)
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
এখন মেট্রিক্স সহজ করতে একাধিক CTE ব্যবহার করা যাক: 'max_price' তৈরি করুন ('order_items' থেকে `MAX(unit_price)` ব্যবহার করে 'max_value' সহ একটি একক সারি বের করে)। মূল ক্যোয়ারীতে, 'order_items' থেকে প্রতিটি 'product_id' এবং 'unit_price' বের করুন এবং কম্পিউটিং '(max_price FROM max_value) - unit_price AS পার্থক্য' থেকে সর্বোচ্চ মূল্যের থেকে কতটা আলাদা তা দেখান। যোগ দিন না — একটি একক মান পেতে CTE-তে একটি সাবকোয়েরি ব্যবহার করুন!
ইঙ্গিত দেখান
সর্বোচ্চ_মূল্য সহ (...) পণ্য_আইডি, ইউনিট_মূল্য নির্বাচন করুন, (সর্বোচ্চ_মূল্য থেকে সর্বোচ্চ_মূল্য নির্বাচন করুন) - অর্ডার_আইটেম থেকে ইউনিট_মূল্য;
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ