मॉड्यूल पाठ (2/3)
एकाधिक और जंजीर सीटीई
एकाधिक और जंजीर सीटीई
जब आप कई को एक साथ जोड़ते हैं तो साथ के भावों की सुंदरता वास्तव में चमकती है। आप कई सीटीई को एक पंक्ति में परिभाषित कर सकते हैं, उन्हें अल्पविराम से अलग कर सकते हैं।
और यहां कुछ ऐसा है जो रिफैक्टरिंग शुद्धतावादियों को पसंद है: बाद के सीटीई पहले के सीटीई से डेटा पढ़ सकते हैं, अनुक्रमिक गणनाओं को टुकड़े-टुकड़े करके खोल सकते हैं!
मल्टी-सीटीई उदाहरण
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' 'orders' से 'COUNT(*)` का उपयोग करके रखे गए 'customer_id' और 'order_count' की गणना करता है।\n2) 'gold_users' 'order_totals' से पढ़ता है और ग्राहकों को 'order_count >= 2' के साथ फ़िल्टर करता है।\nअंत में 'ग्राहक' तालिका में शामिल हों ('first_name' निकालें और 'last_name') 'gold_users' (ON c.id = g.customer_id) के साथ, और उनका 'order_count' भी दिखाएं।
संकेत दिखाएँ
order_totals और gold_users को अल्पविराम से अलग करें (कोई दूसरा नहीं!)
3 प्रयासों के बाद समाधान उपलब्ध है
आइए अब मेट्रिक्स को सरल बनाने के लिए एकाधिक CTE का उपयोग करें: 'max_price' बनाएं ('order_items' से `MAX(unit_price)` का उपयोग करके 'max_value' के साथ एक पंक्ति निकालता है)। मुख्य क्वेरी में, 'order_items' से प्रत्येक 'product_id' और 'unit_price' निकालें और '(max_price से अधिकतम मूल्य चुनें) - Unit_price AS अंतर' की गणना करते हुए दिखाएं कि यह अधिकतम मूल्य से कितना भिन्न है। नो जॉइन - एकल मान प्राप्त करने के लिए CTE पर सबक्वेरी का उपयोग करें!
संकेत दिखाएँ
max_price AS के साथ (...) product_id, Unit_price चुनें, (max_price से max_value चुनें) - order_items से Unit_price;
3 प्रयासों के बाद समाधान उपलब्ध है