PDA

View Full Version : توابع ranking



z.neshati
پنج شنبه 19 بهمن 1391, 00:07 صبح
با سلام خدمت دوستان
در مورد توابع rank() , dense_rank() , ntile توضیح می خواستم


با تشکر

Salah Sanjabian
پنج شنبه 19 بهمن 1391, 20:27 عصر
سلام . دوست عزیز این توابع برای رتبه بندی استفاده میشه از این جهت با نام Ranking Function شناخته می شوند .فرض کن میخوای ببینی یک دانش آموز چه رتبه ای رو تو کلاس بدست آورده به همین منظور از این توابع استفاده میکنی که البته با Over Clause باید استفاده بشه.
نتیجه کوئری زیررونگاه کن

SELECT orderid, custid, val,
ROW_NUMBER() OVER(ORDER BY val) AS rownum,
RANK() OVER(ORDER BY val) AS rank,
DENSE_RANK() OVER(ORDER BY val) AS dense_rank,
NTILE(100) OVER(ORDER BY val) AS ntile
FROM Sales.OrderValues
ORDER BY val;


Ntile Dense_Rank Rank Value OrderID
10782 12.50 1 1 1
10807 18.40 2 2 1
10586 23.80 3 3 1
10767 28.00 4 4 1
10898 30.00 5 5 1
10900 33.75 6 6 1
10883 36.00 7 7 1
11051 36.00 7 7 1
10815 40.00 9 8 1
10674 45.00 10 9 1
تو مقدار 36 که مربوط به Order ID های 10883 و 11051 است رتبه 7 بهشون اختصاص داده شده ولی رکورد بعد از این 2 رمورد را اگر نگاه کنید در تابع Rank رتبه 9 ولی در تابع Dense Rank رتبه 8 رو اختصاص داده Ntile هم واسه تعیین کردن این که رکورد مورد نظر جزو کدام گروه است مثلا فرضا 1000 تا رکورد داشته باشیم و Ntile(100) رو تعیین کردیم پس 10 گروه داریم که 10 گروه اول عدد 1 بهشون اختصاص داده میشه

محمد سلیم آبادی
جمعه 20 بهمن 1391, 07:00 صبح
دو تابع rank و dense_rank برای مقادیر یکسان یک مقدار در نظر می گیرند. اما در خروجی تابع rank، گپ وجود دارد ولی در مورد dense_rank این گونه نیست.
تابع ntile نیز برای گروه بندی سطرهای جدول بکار می رود. یک مثال از کاربرد این تابع در اینجا (http://www.dotnettips.info/post/1186/%D8%AF%D8%B3%D8%AA%D9%87-%D8%A8%D9%86%D8%AF%DB%8C-%D8%B3%D8%B7%D8%B1-%D9%87%D8%A7%DB%8C-%D8%AC%D8%AF%D9%88%D9%84) آورده شده است. و در اینجا (http://www.dotnettips.info/post/1207/%D8%A8%D8%AF%D8%B3%D8%AA-%D8%A2%D9%88%D8%B1%D8%AF%D9%86-%D8%A8%D8%B1%DA%AF%D9%87%D8%A7%DB%8C-%DB%8C%DA%A9-%D8%AF%D8%B1%D8%AE%D8%AA-%D8%AA%D9%88%D8%B3%D8%B7-recursive-cte)نیز می توانید با کاربرد تابع dense_rank در بدست آوردن پایین ترین گره های یک درخت آشنا شوید.

fakhravari
جمعه 20 بهمن 1391, 20:17 عصر
داش msalim (http://barnamenevis.org/member.php?108959-msalim) یه مثال ساده تر میزنید

محمد سلیم آبادی
جمعه 20 بهمن 1391, 20:26 عصر
به مثال موجود در این آدرس با دقت توجه کنید:
http://msdn.microsoft.com/en-us/library/ms189798.aspx