தொகுதி பாடங்கள் (2/4)
சாளர செயல்பாடுகள்: தரவரிசை மற்றும் ஒரு குழு கணக்கீடுகள்
ஒரு சாளர செயல்பாடு என்பது "வரிசைகளின் குழுவில்" செயல்படும் ஒரு செயல்பாடாகும்.
(window) ஆனால் — GROUP BY போலல்லாமல் — இன் எண்ணிக்கையைக் குறைக்காது
வரிசைகள்: சாளரத்தின் மீது கணக்கிடப்பட்ட மதிப்பு ஒவ்வொரு வரிசையிலும் இணைக்கப்பட்டுள்ளது
இறுதி முடிவு.
தரவரிசைகள், முற்போக்கான எண்கள், சதவீதங்களுக்கான சரியான கருவி இது
ஒரு குழு மொத்தத்தில், மற்றும் மோசமான பல செயல்பாடுகள் அல்லது
GROUP BY உடன் சாத்தியமற்றது.
தொடரியல்: function() OVER (…)
ROW_NUMBER() OVER (PARTITION BY colonna ORDER BY colonna2)கூறுகள்:
PARTITION BY— "குழுக்களை" வரையறுக்கிறது (GROUP BYபோன்றவை, ஆனால் வரிசைகள் தனித்தனியாக இருங்கள்);ORDER BYஉள்ளேOVER(…)— உள் வரிசையை வரையறுக்கிறது பிரிவினை.
OVER () (வெற்று அடைப்புக்குறிகள்) என்றால் "முழு அட்டவணையும் ஒரு சாளரமாக".
"மொத்தத்தின் சதவீதம்" போன்ற கணக்கீடுகளுக்கு பயனுள்ளதாக இருக்கும்.
தரவரிசை செயல்பாடுகள்
ROW_NUMBER() OVER (PARTITION BY p ORDER BY o)
RANK() OVER (PARTITION BY p ORDER BY o)
DENSE_RANK() OVER (PARTITION BY p ORDER BY o)வேறுபாடுகள் (மதிப்புகளுடன் 100, 100, 90, 80):
| செயல்பாடு | பதவிகள் |
|---|---|
ROW_NUMBER | 1, 2, 3, 4 (எப்போதும் தனித்துவமானது) |
RANK | 1, 1, 3, 4 (இணைகள் ஒரு நிலையைப் பகிர்ந்து கொள்கின்றன, ** "இடைவெளிகளை" விட்டுவிடும்**) |
DENSE_RANK | 1, 1, 2, 3 (இணைகள் ஒரு நிலையைப் பகிர்ந்து கொள்கின்றன, இடைவெளிகள் இல்லாமல்) |
எடுத்துக்காட்டு: ஒரு வகைக்கான தயாரிப்பு தரவரிசை
SELECT name,
category_id,
price,
RANK() OVER (PARTITION BY category_id ORDER BY price DESC) AS rank
FROM products
ORDER BY category_id, rank;ஒவ்வொரு category_id க்கும் RANK 1 இலிருந்து மறுதொடக்கம் செய்து இறங்குவதன் மூலம் ஆர்டர் செய்கிறது
விலை: நீங்கள் தயாரிப்புகளின் தரவரிசையை ஒவ்வொரு வகைக்குள்ளும், ஒன்றில் பெறுவீர்கள்
சுடப்பட்டது.
முற்போக்கான எண்ணிடல்
-- Progressive order number for each customer:
SELECT id,
customer_id,
ordered_at,
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY ordered_at) AS row_num
FROM orders
ORDER BY customer_id, row_num;ஒவ்வொரு வாடிக்கையாளரின் முதல் ஆர்டரில் row_num = 1, இரண்டாவது 2, போன்றவை இருக்கும்.
முயற்சி செய்து பாருங்கள்
ஒவ்வொரு தயாரிப்புக்கும் பெயர், வகை_ஐடி, விலை மற்றும் தரவரிசை (பிரிவுக்குள் விலையை இறக்குவதன் மூலம் தரவரிசை; ரேங்க் பயன்படுத்தவும்). ஏறுவரிசை_ஐடி மற்றும் ஏறுவரிசையில் வரிசைப்படுத்தவும்.
குறிப்பைக் காட்டு
பிரிவு_ஐடி குழுக்களின் மூலம் பிரித்தல், குழுவிற்குள் விலை DESC ஆர்டர்கள் மூலம் ஆர்டர் செய்யவும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
மதிப்பாய்வு பயிற்சி
ஒவ்வொரு ஆர்டருக்கும் ஐடி, customer_id, order_at மற்றும் row_num ஐக் காட்டவும் (ஒரு வாடிக்கையாளருக்கு முற்போக்கான ROW_NUMBER, ஆர்டர்_இல் ஏறுவரிசையில் வரிசைப்படுத்தப்பட்டது). customer_id மற்றும் row_num மூலம் ஆர்டர் செய்யவும்.
குறிப்பைக் காட்டு
பகிர்வில் ROW_NUMBER எப்போதும் தனித்துவமானது.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்