మాడ్యూల్ పాఠాలు (2/3)
బహుళ మరియు చైన్డ్ CTEలు
బహుళ మరియు చైన్డ్ CTEలు
మీరు అనేక గొలుసులను బంధించినప్పుడు వ్యక్తీకరణలతో కూడిన చక్కదనం నిజంగా ప్రకాశిస్తుంది. మీరు వరుసగా అనేక CTEలను నిర్వచించవచ్చు, వాటిని కామాతో వేరు చేయవచ్చు.
రీఫ్యాక్టరింగ్ ప్యూరిస్టులు ఇష్టపడే విషయం ఇక్కడ ఉంది: తర్వాతి CTEలు ** మునుపటి CTEల నుండి డేటాను చదవగలరు**, సీక్వెన్షియల్ లెక్కలను ఒక్కొక్కటిగా అన్ప్యాక్ చేయడం!
బహుళ-CTE ఉదాహరణ
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' 'కస్టమర్_ఐడి'ని గణిస్తుంది మరియు 'ఆర్డర్ల' నుండి `COUNT(*)`ని ఉపయోగించి ఉంచబడిన 'ఆర్డర్_కౌంట్'.\n2) 'order_counts' నుండి 'gold_users' రీడ్లు కస్టమర్లను 'order_count IN >= '2'కి అనుగుణంగా ఫిల్టర్ చేస్తూ 'order_count IN >= '2' తో చదవబడతాయి. 'gold_users' (ON c.id = g.customer_id)తో 'first_name' మరియు 'last_name') మరియు వారి 'order_count'ని కూడా చూపండి.
సూచనను చూపించు
ఆర్డర్_మొత్తాలు మరియు గోల్డ్_యూజర్లను కామాతో వేరు చేయండి (రెండవది కాదు!)
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
ఇప్పుడు కొలమానాలను సరళీకృతం చేయడానికి బహుళ CTEలను ఉపయోగిస్తాము: 'max_price'ని సృష్టించండి ('order_items' నుండి `MAX(unit_price)`ని ఉపయోగించి 'max_value'తో ఒకే అడ్డు వరుసను సంగ్రహిస్తుంది). ప్రధాన ప్రశ్నలో, 'order_items' నుండి ప్రతి 'product_id' మరియు 'unit_price'ని సంగ్రహించండి మరియు అది గరిష్ట ధర నుండి ఎంత తేడా ఉందో చూపుతుంది, '(max_value from max_price) - unit_price AS తేడా'. చేరవద్దు — ఒకే విలువను పొందడానికి CTEలో సబ్క్వెరీని ఉపయోగించండి!
సూచనను చూపించు
గరిష్ట_ధర AS (...) SELECT product_id, unit_price, (max_value from max_price) - unit_price from order_items;
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది