தொகுதி பாடங்கள் (3/4)
லேக், லீட் மற்றும் இயங்கும் மொத்தங்கள்
LAG மற்றும் LEAD ஆகியவை உங்களுக்கு அணுகலை வழங்கும் இரண்டு சிறப்பு சாளர செயல்பாடுகள்
அதே பகிர்வின் பிற வரிசைகள்: முந்தைய வரிசை (LAG) அல்லது
சாளரத்தின் ORDER BY இன் படி அடுத்தது (LEAD). அவர்கள் தான்
go-to tool for row-to-row comparisons (டெல்டாக்கள், மாறுபாடுகள், இடைவெளிகள்)
மற்றும் — SUM/AVG/COUNT OVER உடன் இணைந்து — இயங்கும் மொத்தத்திற்கு.
லேக்: முந்தைய வரிசை
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 படி. இதன் விளைவு தி
கிளாசிக் "இயங்கும் இருப்பு".
முயற்சி செய்து பாருங்கள்
ஒவ்வொரு ஆர்டருக்கும் ஐடி, customer_id, order_at மற்றும் ஒரு days_from_previous நெடுவரிசையைக் காட்டவும், இது தற்போதைய ஆர்டருக்கும் அதே வாடிக்கையாளரின் முந்தைய ஆர்டருக்கும் இடையே உள்ள முழு நாட்களின் எண்ணிக்கை (FLOOR உடன்), order_at ஆல் ஆர்டர் செய்யப்பட்டது. முந்தைய ஆர்டர் இல்லை என்றால் NULL. customer_id மற்றும் order_at மூலம் ஆர்டர் செய்யவும்.
குறிப்பைக் காட்டு
LAG(ordered_at) OVER (PARTITION by customer_id Order by order_at) வாடிக்கையாளரின் முந்தைய ஆர்டரின் நேரமுத்திரையை வழங்கும். ஒரு இடைவெளியைப் பெற கழிக்கவும், பின்னர் நாட்களாக மாற்றவும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
மதிப்பாய்வு பயிற்சி
டெலிவரி செய்யப்பட்ட ஒவ்வொரு ஆர்டருக்கும் (நிலை = 'டெலிவரி'), ஐடி, வாடிக்கையாளர்_ஐடி, ஆர்டர்_அட், ஆர்டர்_டோட்டல் (அதன் வரிசை பொருட்களின் அளவு * யூனிட்_விலை) மற்றும் ரன்னிங்_டோட்டல் (ஒரு வாடிக்கையாளருக்கு மொத்தமாக ஆர்டர் செய்யப்படுவது, ஆர்டர்_அட் மூலம் ஆர்டர் செய்யப்படுகிறது) ஆகியவற்றைக் காட்டவும். ஆர்டர்_மொத்தத்திற்கு CTE ஐப் பயன்படுத்தவும். customer_id மற்றும் order_at மூலம் ஆர்டர் செய்யவும்.
குறிப்பைக் காட்டு
ஒரு ஆர்டருக்கான மொத்தத்தை CTE கணக்கிடுகிறது; SUM OVER ஒரு வாடிக்கையாளருக்கு காலப்போக்கில் இயங்கும் மொத்தத்தை உருவாக்குகிறது.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்