PDA

View Full Version : بدست آوردن نمره اول دانشگاه



hashemi85sep
پنج شنبه 19 اسفند 1389, 15:07 عصر
سلام خدمت اساتید محترم
من میخوام که نمره اول دانشگاه رو بدست بیارم و یه کوئری نوشتم که فقط یه نمره اول رو بدست میاره :

SELECT top 1 sum(nomreh*vahed)/sum(vahed),shd,term from ent group by shd order bye sum(nomreh*vahed)/sum(vahed)

باید این دستور رو توری بنویسیم که اگه چند تا معدل مساوی هم بود که یعنی باهم نمره اول میشدن رو نشون بده..

اگه میشه راهنمایی کنید

behrouzlo
پنج شنبه 19 اسفند 1389, 16:08 عصر
فکر کنم با دستور زیر به نتیجه برسید

With List As (
SELECT sum(nomreh*vahed)/sum(vahed) As Savg,shd,term from ent group by shd,term)
Select Savg,shd,term From List As L Where Savg = (Select Max(Savg) From List As Ml Where L.Term = ML.Term)

hashemi85sep
چهارشنبه 25 اسفند 1389, 18:06 عصر
فکر کنم با دستور زیر به نتیجه برسید

With List As (
SELECT sum(nomreh*vahed)/sum(vahed) As Savg,shd,term from ent group by shd,term)
Select Savg,shd,term From List As L Where Savg = (Select Max(Savg) From List As Ml Where L.Term = ML.Term)




سلام
یادم رفت که بگم ، فقط با یه select باید بنویسم ..
اینی که شما نوشتی 3تا select داره
اساتید ممنون میشم راهنمایی کنید

Reza_Yarahmadi
پنج شنبه 26 اسفند 1389, 14:29 عصر
در صورتی که میخواید نمره اول کل رشته ها رو بدست بیارید بصورت زیر عمل کنید. البته این دستور درسته که با یک Select نتیجه رو بدست میاره ولی بدلیل مرتب سازی زمان اجرایی اون از انجام 2 Select پشت سرهم بیشتره (مخصوصا در تعداد رکورد بالا)
Select Top 1
Shd,
Term,
SUM(Nomreh * Vahed) / SUM(Vahed) AS Average,
SUM(Vahed) as Vahed_Kol
From Table_1
Group By
Term,
Shd
Order By
SUM(Nomreh * Vahed) / SUM(Vahed) DESC
ولی اگر میخواید به ازا هر رشته نمره اول رو بدست بیارید فکر نمیکنم روشی باشه که فقط با یک Select به نتیجه برسه.

hashemi85sep
پنج شنبه 04 فروردین 1390, 09:33 صبح
در صورتی که میخواید نمره اول کل رشته ها رو بدست بیارید بصورت زیر عمل کنید. البته این دستور درسته که با یک Select نتیجه رو بدست میاره ولی بدلیل مرتب سازی زمان اجرایی اون از انجام 2 Select پشت سرهم بیشتره (مخصوصا در تعداد رکورد بالا)
Select Top 1
Shd,
Term,
SUM(Nomreh * Vahed) / SUM(Vahed) AS Average,
SUM(Vahed) as Vahed_Kol
From Table_1
Group By
Term,
Shd
Order By
SUM(Nomreh * Vahed) / SUM(Vahed) DESC
ولی اگر میخواید به ازا هر رشته نمره اول رو بدست بیارید فکر نمیکنم روشی باشه که فقط با یک Select به نتیجه برسه.

سلام دوست عزیز
ممنون از جوابت
اینم تقریبا شبیه همونیه که خودم نوشتم ولی این که فقط یه نمره اولو نمایش میده
من فرض رو بر این میگیریم که چند تا معدل هم اندازه هم وجود داره که با هم نمره اول هستن ، میخوام همشو نمایش بده ...

mobtakercode
یک شنبه 07 فروردین 1390, 23:20 عصر
از دستورات زیر استفاده کنید

Select top 1 WITH TIES
Shd,
Term,
SUM(Nomreh * Vahed) / SUM(Vahed) AS Average,
SUM(Vahed) as Vahed_Kol
From ent
Group By
term,shd
Order By
SUM(Nomreh * Vahed) / SUM(Vahed) desc


دستور WITH TIES رکوردهای مشابه را برمی گرداند

محمد سلیم آبادی
جمعه 12 فروردین 1390, 10:39 صبح
پست قبلی دقیقا به نکته ای اشاره کرد که مشکلتون رو حل می کنه یعنی WITH TIES.
همچین در ماده order by نیازی نیست که دوباره میانگین را بدست بیارین یعنی کد زیر کفایت میکنه:
ORDER BY average DESC

از کوئری زیر هم می تونین استفاده کنین:

SELECT * FROM
(SELECT *, rnk = DENSE_RANKE() OVER(PARITION BY term, shd ORDER BY SUM(nomreh * vahed)/SUM(vahed) DESC) FROM table GROUP BY term, shd) AS D
WHERE rnk = 1;

hashemi85sep
دوشنبه 15 فروردین 1390, 16:47 عصر
سلام دوستان
اینو به استادمون دادم ولی میگه که with TIES یه قسمت اضافه هم داره
که باید اونم بنویسم ...
کسی میدونه که چیه؟

محمد سلیم آبادی
دوشنبه 15 فروردین 1390, 17:01 عصر
کل سنتکس Top خلاصه میشه به :


[
TOP (expression) [PERCENT]
[ WITH TIES ]
]



یعنی with ties چیز اضافه تری برای نتظیم کردن نداره.
اینجا رو ببینین:
http://msdn.microsoft.com/en-us/library/ms189463.aspx