ورود

View Full Version : چطوری میشه رنکینگ یک فیلد رو پیدا کرد؟



mohammad_kazem
یک شنبه 05 تیر 1390, 02:30 صبح
سلام بچه ها
سوالم رو با یک مثال میپرسم
فرض کنید یه table داریم که فقط دارای دو فیلد نام و امتیاز هست. در این جدول به هر شخص امتیاز میدیم.
حالا میخوایم اطلاعات زیر رو بدست بیاریم
1- بالاترین(پایین ترین) امتیاز متعلق به چه کسی است؟
2- n نفر اول چه کسانی هستند؟(مثلا 10 نفر اول)
3-(مهمترین سوال) یک فرد خاص در چه رتبه ای قرار دارد؟ فرض کنید که نام ها تکراری نیستند.
میتونین راهنماییم کنین؟
مرسی

حمیدرضاصادقیان
یک شنبه 05 تیر 1390, 07:58 صبح
سلام.
جواب 1 :

Select Max(Rank) , Name from Table1
Group By Name


جواب 2:

Select Top 10 * from Table1
Order by Rank Desc


جواب 3:
شما اول باید مشخص کنید یعنی چی در چه امتیازی قرار دارد.مثلا اگر در جدول رتبه 20 بود به شما 20 نمایش دهد یا اینکه فیلد Rank اونو به شما نمایش بده؟

mohammad_kazem
یک شنبه 05 تیر 1390, 10:53 صبح
یعنی در جدول زیر که اطلاعاتش مرتب شده برای نام علی شماره 3 رو برگردونه.
1- احمد 700 (امتیاز)
2- محمد 660
3- علی 510
4- ...
البته نکته مهم اینه که نمیخوایم یکبار مرتب سازی رو انجام بدیم و دوباره رتبه طرف رو دربیاریم و فقط با یک کوئری اینکار انجام بشه (حتی الامکان)
راستی بابت جوابای قبلی ممنون.

Reza_Yarahmadi
یک شنبه 05 تیر 1390, 18:43 عصر
البته نکته مهم اینه که نمیخوایم یکبار مرتب سازی رو انجام بدیم و دوباره رتبه طرف رو دربیاریم و فقط با یک کوئری اینکار انجام بشه (حتی الامکان)
با یک Select فکر نمیکنم بشه چون به هر حال یکبار باید امتیاز نفر مورد نظر پیدا بشه یکبار هم رتبه اون. بدون مرتب سازی میشه بصورت زیر عمل کرد
Declare @YourRank int
Set @YourRank = 510

Select COUNT(*) + 1 as YourPoint
From TableName T
Where T.Rank > @YourRank

behrouzlo
جمعه 10 تیر 1390, 23:16 عصر
فکر کنم با استفاده از کد زیر تقریبا تمام نیاز های شما برآورده بشه :
With Tbl As (
Select ROW_NUMBER() Over (Order By Point) YourRank,Point,Name From TableName T )
Select * From Tbl