మాడ్యూల్ పాఠాలు (3/4)
లాగ్, లీడ్ మరియు రన్నింగ్ మొత్తాలు
LAG మరియు LEAD అనేవి రెండు ప్రత్యేక విండో ఫంక్షన్లు మీకు యాక్సెస్ని అందిస్తాయి
అదే విభజన యొక్క ఇతర అడ్డు వరుసలు: మునుపటి అడ్డు వరుస (LAG) లేదా
విండో ORDER BY ప్రకారం తదుపరిది (LEAD). వారు ది
గో-టు టూల్ వరుస నుండి వరుస పోలికలు (డెల్టాలు, వైవిధ్యాలు, విరామాలు)
మరియు — SUM/AVG/COUNT OVERతో కలిపి — రన్నింగ్ మొత్తాలకు.
LAG: మునుపటి వరుస
LAG(colonna) OVER (PARTITION BY p ORDER BY o)
LAG(colonna, n) OVER (PARTITION BY p ORDER BY o) -- n righe indietro
LAG(colonna, n, default) OVER (PARTITION BY p ORDER BY o) -- default se non c'èఉదాహరణ: ప్రతి ఆర్డర్ కోసం, "మునుపటి ఆర్డర్ నుండి అదే విధంగా రోజులు కస్టమర్":
SELECT id,
customer_id,
ordered_at,
ordered_at - LAG(ordered_at) OVER (
PARTITION BY customer_id ORDER BY ordered_at
) AS since_previous_order
FROM orders
ORDER BY customer_id, ordered_at;ప్రతి కస్టమర్ యొక్క మొదటి ఆర్డర్ since_previous_order = NULL ఎందుకంటే
విభజనలో "మునుపటి" లేదు.
లీడ్: తదుపరి వరుస
LAG యొక్క అద్దం. విలక్షణమైనది: "తదుపరి ఈవెంట్ వరకు సమయం", "తేడా
తదుపరి సంస్కరణతో".
SELECT id, ordered_at,
LEAD(ordered_at) OVER (PARTITION BY customer_id ORDER BY ordered_at)
- ordered_at AS to_next
FROM orders;అమలవుతున్న మొత్తాలు: ఓవర్తో కూడిన మొత్తం
మొత్తం ఫంక్షన్లు (SUM, AVG, COUNT, MAX, MIN) అవుతాయి
సంచిత OVER (… ORDER BY …)తో కలిపినప్పుడు:
SELECT order_id,
total,
SUM(total) OVER (
PARTITION BY customer_id
ORDER BY ordered_at
) AS running_total
FROM …;ప్రతి అడ్డు వరుస కోసం, SUM విభజనలోని అన్ని అడ్డు వరుసల మొత్తాన్ని గణిస్తుంది
ఆ పాయింట్, విండో ORDER BY ప్రకారం. ఫలితం
క్లాసిక్ "రన్నింగ్ బ్యాలెన్స్".
దీనిని ప్రయత్నించండి
ప్రతి ఆర్డర్ కోసం id, customer_id, order_at మరియు ఒక days_from_previous నిలువు వరుసను చూపుతుంది, ఇది ఆర్డర్_at ద్వారా ఆర్డర్ చేయబడిన ప్రస్తుత ఆర్డర్ మరియు మునుపటి అదే కస్టమర్కు మధ్య ఉన్న మొత్తం రోజుల సంఖ్య (FLOORతో). మునుపటి ఆర్డర్ లేకపోతే NULL. customer_id ద్వారా ఆర్డర్ చేయండి మరియు order_at.
సూచనను చూపించు
LAG(ordered_at) OVER (PARTITION by customer_id ORDER BY order_at) కస్టమర్ యొక్క మునుపటి ఆర్డర్ టైమ్స్టాంప్ను అందిస్తుంది. INTERVALని పొందడానికి తీసివేయండి, ఆపై రోజులకు మార్చండి.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
వ్యాయామం సమీక్షించండి
డెలివరీ చేయబడిన ప్రతి ఆర్డర్ కోసం (స్టేటస్ = 'డెలివరీ చేయబడినది'), id, customer_id, order_at, order_total (పరిమాణం మొత్తం * యూనిట్_ప్రైస్ దాని లైన్ ఐటెమ్లు) మరియు రన్నింగ్_టోటల్ (కస్టమర్కి మొత్తం అమలవుతున్న మొత్తం, order_at ద్వారా ఆర్డర్ చేయబడింది) చూపండి. ఆర్డర్_మొత్తం కోసం CTEని ఉపయోగించండి. customer_id ద్వారా ఆర్డర్ చేయండి మరియు order_at.
సూచనను చూపించు
CTE మొత్తం ఆర్డర్ను గణిస్తుంది; SUM OVER కాలక్రమేణా ఒక్కో కస్టమర్కు అమలవుతున్న మొత్తాన్ని ఉత్పత్తి చేస్తుంది.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది