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

சாளர செயல்பாடுகள்: தரவரிசை மற்றும் ஒரு குழு கணக்கீடுகள்

ஒரு சாளர செயல்பாடு என்பது "வரிசைகளின் குழுவில்" செயல்படும் ஒரு செயல்பாடாகும். (window) ஆனால் — GROUP BY போலல்லாமல் — இன் எண்ணிக்கையைக் குறைக்காது வரிசைகள்: சாளரத்தின் மீது கணக்கிடப்பட்ட மதிப்பு ஒவ்வொரு வரிசையிலும் இணைக்கப்பட்டுள்ளது இறுதி முடிவு.

தரவரிசைகள், முற்போக்கான எண்கள், சதவீதங்களுக்கான சரியான கருவி இது ஒரு குழு மொத்தத்தில், மற்றும் மோசமான பல செயல்பாடுகள் அல்லது GROUP BY உடன் சாத்தியமற்றது.

தொடரியல்: function() OVER (…)

SQL
ROW_NUMBER() OVER (PARTITION BY colonna ORDER BY colonna2)

கூறுகள்:

  • PARTITION BY — "குழுக்களை" வரையறுக்கிறது (GROUP BY போன்றவை, ஆனால் வரிசைகள் தனித்தனியாக இருங்கள்);
  • ORDER BY உள்ளே OVER(…) — உள் வரிசையை வரையறுக்கிறது பிரிவினை.

OVER () (வெற்று அடைப்புக்குறிகள்) என்றால் "முழு அட்டவணையும் ஒரு சாளரமாக". "மொத்தத்தின் சதவீதம்" போன்ற கணக்கீடுகளுக்கு பயனுள்ளதாக இருக்கும்.

தரவரிசை செயல்பாடுகள்

Code
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_NUMBER1, 2, 3, 4 (எப்போதும் தனித்துவமானது)
RANK1, 1, 3, 4 (இணைகள் ஒரு நிலையைப் பகிர்ந்து கொள்கின்றன, ** "இடைவெளிகளை" விட்டுவிடும்**)
DENSE_RANK1, 1, 2, 3 (இணைகள் ஒரு நிலையைப் பகிர்ந்து கொள்கின்றன, இடைவெளிகள் இல்லாமல்)

எடுத்துக்காட்டு: ஒரு வகைக்கான தயாரிப்பு தரவரிசை

SQL
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 இலிருந்து மறுதொடக்கம் செய்து இறங்குவதன் மூலம் ஆர்டர் செய்கிறது விலை: நீங்கள் தயாரிப்புகளின் தரவரிசையை ஒவ்வொரு வகைக்குள்ளும், ஒன்றில் பெறுவீர்கள் சுடப்பட்டது.

முற்போக்கான எண்ணிடல்

SQL
-- 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, போன்றவை இருக்கும்.

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

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

ஒவ்வொரு தயாரிப்புக்கும் பெயர், வகை_ஐடி, விலை மற்றும் தரவரிசை (பிரிவுக்குள் விலையை இறக்குவதன் மூலம் தரவரிசை; ரேங்க் பயன்படுத்தவும்). ஏறுவரிசை_ஐடி மற்றும் ஏறுவரிசையில் வரிசைப்படுத்தவும்.

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

பிரிவு_ஐடி குழுக்களின் மூலம் பிரித்தல், குழுவிற்குள் விலை DESC ஆர்டர்கள் மூலம் ஆர்டர் செய்யவும்.

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

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

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

ஒவ்வொரு ஆர்டருக்கும் ஐடி, customer_id, order_at மற்றும் row_num ஐக் காட்டவும் (ஒரு வாடிக்கையாளருக்கு முற்போக்கான ROW_NUMBER, ஆர்டர்_இல் ஏறுவரிசையில் வரிசைப்படுத்தப்பட்டது). customer_id மற்றும் row_num மூலம் ஆர்டர் செய்யவும்.

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

பகிர்வில் ROW_NUMBER எப்போதும் தனித்துவமானது.

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