முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
தொகுதி 7 · பாடம் 3 இன் 4பாடத்திட்டத்தில் 27/57~12 min
தொகுதி பாடங்கள் (3/4)

லேக், லீட் மற்றும் இயங்கும் மொத்தங்கள்

LAG மற்றும் LEAD ஆகியவை உங்களுக்கு அணுகலை வழங்கும் இரண்டு சிறப்பு சாளர செயல்பாடுகள் அதே பகிர்வின் பிற வரிசைகள்: முந்தைய வரிசை (LAG) அல்லது சாளரத்தின் ORDER BY இன் படி அடுத்தது (LEAD). அவர்கள் தான் go-to tool for row-to-row comparisons (டெல்டாக்கள், மாறுபாடுகள், இடைவெளிகள்) மற்றும் — SUM/AVG/COUNT OVER உடன் இணைந்து — இயங்கும் மொத்தத்திற்கு.

லேக்: முந்தைய வரிசை

SQL
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'è

உதாரணம்: ஒவ்வொரு ஆர்டருக்கும், "முந்தைய ஆர்டரில் இருந்து அதே நாட்கள் வாடிக்கையாளர்":

SQL
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 இன் கண்ணாடி. வழக்கமான: "அடுத்த நிகழ்வு வரை நேரம்", "வேறுபாடு அடுத்த பதிப்புடன்".

SQL
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 …) உடன் இணைந்தால்:

SQL
SELECT order_id,
       total,
       SUM(total) OVER (
         PARTITION BY customer_id
         ORDER BY     ordered_at
       ) AS running_total
FROM   …;

ஒவ்வொரு வரிசைக்கும், SUM பகிர்வில் உள்ள அனைத்து வரிசைகளின் கூட்டுத்தொகையைக் கணக்கிடுகிறது அந்த புள்ளி**, சாளரத்தின் ORDER BY படி. இதன் விளைவு தி கிளாசிக் "இயங்கும் இருப்பு".

முயற்சி செய்து பாருங்கள்

உடற்பயிற்சி#sql.m7.l3.e1
முயற்சிகள்: 0ஏற்றுகிறது…

ஒவ்வொரு ஆர்டருக்கும் ஐடி, 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 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

மதிப்பாய்வு பயிற்சி

உடற்பயிற்சி#sql.m7.l3.e2
முயற்சிகள்: 0ஏற்றுகிறது…

டெலிவரி செய்யப்பட்ட ஒவ்வொரு ஆர்டருக்கும் (நிலை = 'டெலிவரி'), ஐடி, வாடிக்கையாளர்_ஐடி, ஆர்டர்_அட், ஆர்டர்_டோட்டல் (அதன் வரிசை பொருட்களின் அளவு * யூனிட்_விலை) மற்றும் ரன்னிங்_டோட்டல் (ஒரு வாடிக்கையாளருக்கு மொத்தமாக ஆர்டர் செய்யப்படுவது, ஆர்டர்_அட் மூலம் ஆர்டர் செய்யப்படுகிறது) ஆகியவற்றைக் காட்டவும். ஆர்டர்_மொத்தத்திற்கு CTE ஐப் பயன்படுத்தவும். customer_id மற்றும் order_at மூலம் ஆர்டர் செய்யவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

ஒரு ஆர்டருக்கான மொத்தத்தை CTE கணக்கிடுகிறது; SUM OVER ஒரு வாடிக்கையாளருக்கு காலப்போக்கில் இயங்கும் மொத்தத்தை உருவாக்குகிறது.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்