मुख्य सामग्री पर जाएं
मॉड्यूल 14 · पाठ 2 का 3पाठ्यक्रम में 54/57~15 min
मॉड्यूल पाठ (2/3)

एकाधिक और जंजीर सीटीई

एकाधिक और जंजीर सीटीई

जब आप कई को एक साथ जोड़ते हैं तो साथ के भावों की सुंदरता वास्तव में चमकती है। आप कई सीटीई को एक पंक्ति में परिभाषित कर सकते हैं, उन्हें अल्पविराम से अलग कर सकते हैं।

और यहां कुछ ऐसा है जो रिफैक्टरिंग शुद्धतावादियों को पसंद है: बाद के सीटीई पहले के सीटीई से डेटा पढ़ सकते हैं, अनुक्रमिक गणनाओं को टुकड़े-टुकड़े करके खोल सकते हैं!

मल्टी-सीटीई उदाहरण

SQL
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;

यह ब्लॉक-शैली प्रोग्रामिंग है! प्रत्येक ब्लॉक केवल एक कार्य करता है।

व्यायाम#sql.m14.l2.e1
प्रयास: 0लोड हो रहा है...

दो अनुक्रमिक 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 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#sql.m14.l2.e2
प्रयास: 0लोड हो रहा है...

आइए अब मेट्रिक्स को सरल बनाने के लिए एकाधिक 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 प्रयासों के बाद समाधान उपलब्ध है