మాడ్యూల్ పాఠాలు (1/3)
CTEలకు పరిచయం (WITH)
CTEలకు పరిచయం (WITH)
త్వరలో లేదా తరువాత ప్రతి ఒక్కరికీ ఇది జరుగుతుంది: మీరు అగ్రిగేషన్ ఫలితం ఆధారంగా డేటాను ఫిల్టర్ చేయాలి, ఆపై ఆ ఫిల్టర్ని తీసుకుని, మరో సమగ్ర ప్రశ్నతో చేరండి. మీరు SELECTని SELECT లోపల రాయడం ప్రారంభించండి, ఇది మరో SELECTలో FROMలో ముగుస్తుంది.
ఫలితం? స్పఘెట్టి SQL, ఏ మానవునికీ చదవలేని ప్రశ్న.
CTEలు (కామన్ టేబుల్ ఎక్స్ప్రెషన్స్) ఈ గందరగోళాన్ని విడదీస్తాయి. మీరు వాటిని WITH కీవర్డ్తో సక్రియం చేస్తారు, ఇది తాత్కాలికంగా పేరు పెట్టబడిన ప్రశ్నలను నిర్వచించడానికి మరియు చివరి ప్రశ్నలో వాటిని "వర్చువల్ పట్టికలు"గా మళ్లీ ఉపయోగించేందుకు మిమ్మల్ని అనుమతిస్తుంది.
ప్రాథమిక సింటాక్స్
WITH premium_customers AS (
SELECT customer_id, SUM(total_amount) AS total_spent
FROM orders
GROUP BY customer_id
HAVING SUM(total_amount) > 1000
)
SELECT customers.first_name, premium_customers.total_spent
FROM customers
JOIN premium_customers ON customers.id = premium_customers.customer_id;మీరు చూడగలిగినట్లుగా, దిగువన ఉన్న ప్రధాన ప్రశ్న నిజమైన పట్టిక వలె premium_customers నుండి చదవబడుతుంది! మరియు ఇది నెస్టెడ్ సబ్క్వెరీలతో కూడిన మెగా ఇన్నర్-జాయిన్ కంటే చాలా చదవగలిగేది.
మేము చాలా ఖరీదైన ఉత్పత్తులను కోరుకుంటున్నాము. 'ప్రైస్ > 500' ఉన్న 'ప్రొడక్ట్స్' నుండి 'id' మరియు 'price'ని ఎంచుకోవడానికి 'luxury_products' అనే CTEని ఉపయోగించండి. ఆపై ఈ CTEలో ప్రధాన ప్రశ్నను అమలు చేయండి మరియు ప్రతిదీ (*) చూపండి.
సూచనను చూపించు
లగ్జరీ_ప్రొడక్ట్లతో ప్రారంభించండి (...) ఆపై లగ్జరీ_ప్రొడక్ట్ల నుండి * ఎంచుకోండి.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
మేము సమీక్షలు వ్రాసే వినియోగదారులను కనుగొనాలనుకుంటున్నాము. 'సమీక్షలు' నుండి ప్రత్యేకమైన (DISTINCT) 'customer_id' విలువలను సంగ్రహించే CTE 'సమీక్షకులు'ని సృష్టించండి. ఆపై 'కస్టమర్స్' టేబుల్ నుండి 'id', 'first_name', 'last_name'ని సంగ్రహించండి మరియు idలోని 'రివ్యూయర్స్' CTEతో \`JOIN\` చేయండి.
సూచనను చూపించు
సమీక్షకులతో పాటు (సమీక్షల నుండి విభిన్న కస్టమర్_ఐడిని ఎంచుకోండి) కస్టమర్ల నుండి ఐడి, మొదటి_పేరు, చివరి_పేరును ఎంపిక చేసుకోండి కస్టమర్లలో రివ్యూయర్లలో చేరండి = reviewers.customer_id;
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది