ماڈیول اسباق (2/3)
متعدد اور زنجیروں سے جڑے ہوئے CTEs
متعدد اور زنجیروں والے CTEs
جب آپ متعدد کو ایک ساتھ جوڑتے ہیں تو اظہار کے ساتھ کی خوبصورتی واقعی چمکتی ہے۔ آپ ایک قطار میں کئی CTEs کی وضاحت کر سکتے ہیں، انہیں کوما سے الگ کر سکتے ہیں۔
اور یہاں کچھ ایسا ہے جو ری فیکٹرنگ پیوریسٹ پسند کرتے ہیں: بعد میں 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;یہ بلاک طرز کی پروگرامنگ ہے! ہر بلاک صرف ایک کام کرتا ہے۔
دو ترتیب وار CTEs کی وضاحت کریں: \n1) 'order_totals' 'customer_id' کی گنتی کرتا ہے اور 'order_count' کو 'COUNT(*)` کا استعمال کرتے ہوئے 'orders' سے رکھا جاتا ہے۔\n2) 'gold_users' پڑھتا ہے 'order_totals' کے ساتھ گاہکوں کو فلٹر کرنے کے ساتھ 'order_custotal' کے ساتھ۔ ('first_name' اور 'last_name' کو نکالنا) 'gold_users' (ON c.id = g.customer_id) کے ساتھ، اور ان کا 'order_count' بھی دکھائیں۔
اشارہ دکھائیں۔
الگ الگ آرڈر_کل اور سونے کے_صارفین کو کوما کے ساتھ (کوئی سیکنڈ نہیں!)
3 کوششوں کے بعد حل دستیاب ہے۔
اب میٹرکس کو آسان بنانے کے لیے متعدد CTEs کا استعمال کریں: 'max_price' بنائیں ('order_items' سے `MAX(unit_price)` کا استعمال کرتے ہوئے 'max_value' کے ساتھ ایک قطار نکالتا ہے)۔ مرکزی استفسار میں، 'order_items' سے ہر 'product_id' اور 'unit_price' کو نکالیں اور دکھائیں کہ یہ زیادہ سے زیادہ قیمت سے کتنا مختلف ہے، کمپیوٹنگ '(SELECT max_value FROM max_price) - unit_price AS فرق'۔ کوئی شمولیت نہیں — ایک قیمت حاصل کرنے کے لیے CTE پر ایک ذیلی سوال کا استعمال کریں!
اشارہ دکھائیں۔
زیادہ سے زیادہ_قیمت کے ساتھ (...) پروڈکٹ_آئی ڈی، یونٹ_قیمت منتخب کریں، (زیادہ سے زیادہ_قیمت منتخب کریں) - آرڈر_آئٹمز سے یونٹ_قیمت؛
3 کوششوں کے بعد حل دستیاب ہے۔