Ranks
ஏதேனும் ஒரு் column-ல் உள்ள மதிப்புகளை ஏறுவரிசையிலோ, இறங்குவரிசையிலோ முறைப்படுத்திவிட்டு பின்னர் அதற்கு 1,2,3…. என மதிப்புகளைக் கொடுப்பதே ranking எனப்படும்.
mysql-ல் ranking என்பது variables-ஐ வைத்தே நடைபெறுகிறது. @ எனும் குறியீடு இது ஒரு் variable என்பதை உணர்த்துகிறது. SET எனும் command முதன்முதலில், variable-க்கு ஒரு் மதிப்பினை வழங்கப் பயன்படுகிறது.
Query-61
SET @var1:= 0;
SELECT emp_name,salary,@var1:= @var1+ 1 AS rank
FROM organisation
ORDER BY salary;
முதலில் ஒரு் variable-க்கு 0 என்று மதிப்பினை வழங்கி விட வேண்டும். பின்னர் select statement-ல் வெளிப்படும் ஒவ்வொரு record-க்கும் variable-வுடன் ஒவ்வொரு எண்ணாகக் கூட்டி வெளிப்படுத்துமாறு செய்ய வேண்டும்.
எனவே முதல் record-க்கு var(0)+1 = 1 என வெளிப்படுத்தும். அடுத்த record-க்கு var-ன் மதிப்பு 1 என மாறியிருந்தால் தான், அதனால் 1+1 = 2 என வெளிப்படுத்த முடியும். . எனவே தான் select statement-ல் var = var + 1 எனக் கொடுக்காமல், var := var + 1 எனக் கொடுத்துள்ளோம். := எனும் குறியீடு variable-வுடன் 1-ஐக் கூட்டி வந்த மதிப்பினை மீண்டும் variable-க்கு வழங்கப் பயன்படுகிறது.
மேற்கண்ட உதாரணத்தில் ஒரே மதிப்பினைப் பெற்ற அடுத்தடுத்த வரிகளுக்கு, அடுத்தடுத்த rank வழங்கப்பட்டிருப்பதை கவனிக்கவும். முறைப்படி பார்த்தால் ஒரே மதிப்புகளுக்கு ஒரே rank மட்டுமே வழங்க வேண்டும். எனவே இதுபோன்ற தவறுகளைத் தவிர்க்க அடுத்தடுத்த மதிப்புகளை ஒப்பிடும் வகையில் ஒரு் condition-ஐ இணைத்தால் போதுமானது. எனவே query-யைப் பின்வருமாறு மாற்றி அமைக்கலாம்.
Query-62
SET @var2 = NULL;
SET @var1= 0;
SELECT emp_name,salary,CASE
WHEN @var2 = salary THEN @var1
WHEN @var2 := salary THEN @var1:= @var1+ 1
END AS rank
FROM organisation
ORDER BY salary;
இங்கு var1, var2 என்று இரண்டு variables பயன்படுத்தப்பட்டுள்ளது. var2- ஆனது order by மூலம் நாம் வரிசைப்படுத்தும் column மதிப்புகளைப் பெற்று விளங்குமாறும், var1-ஆனது rank வழங்கவும் பயன்பட்டுள்ளது.
முதலில் var2-க்கு NULL மதிப்பு வழங்கப்பட்டுள்ளது. பின்னர் case statement மூலம் var2-ன் மதிப்பு column-ல் உள்ள முதல் மதிப்புக்கு சமமாக உள்ளதா என்பதை பரிசோதிக்கிறது. சமமாக இல்லை. எனவே := குறியீடு மூலம் column-ல் உள்ள முதல் மதிப்பினை var2 பெற்றுவிடுகிறது, அதன் தொடர்ச்சியாக var1(0)+1 = 1 என வெளிப்படுத்துகிறது. இப்போது var2-ன் மதிப்பு column-ல் உள்ள முதல் மதிப்புக்கு சமமாக உள்ளது. இப்போது மீண்டும் case statement மூலம் var2, column-ல் உள்ள அடுத்த மதிப்புடன் சமமாக உள்ளதா என்பதை சோதிக்கிறது. அவை சமமாக இருப்பின் அதே rank-ஐ வழங்குமாறும், அவ்வாறு இல்லையெனில், அதற்கு அடுத்த rank-ஐ வழங்குமாறும் கட்டளைகளை அமைக்கிறது.
—-
து. நித்யா
இவர் cognizant நிறுவனத்தில் Data Warehouse Testing-ல் பணியாற்றி வருகிறார்.
மின்னஞ்சல் : nithyadurai87@gmail.com