PDA

View Full Version : نحوه عملکرد top در استورها



hojjat_gh
پنج شنبه 21 آذر 1387, 13:13 عصر
با سلام میخواستم بدونم وازه top که در استورهای select استفاده میشه کارش چیه وبه چه شکل عمل میکنه؟
با تشکر

ar.shirazi
پنج شنبه 21 آذر 1387, 17:40 عصر
با سلام میخواستم بدونم وازه top که در استورهای select استفاده میشه کارش چیه وبه چه شکل عمل میکنه؟
با تشکر

این واژه کمک میکند تا از یک کوئری که مثلا n رکورد بر میگرداند، تنها به تعداد مشخص شده توسط عملگر top رکوردهای اول آن برگردانده شوند مثلا اگر کوئری زیر 100 رکورد برگرداند :


select * from Users

این کوئری 5 رکورد اول از آن 100 رکورد را برمیگرداند

Select Top(5) * from Users

پیروز باشید

hojjat_gh
پنج شنبه 21 آذر 1387, 19:41 عصر
ممنون دوست عزیز
اگه من یه تیبل با 500 اسم متفاوت داشته باشم ومثلا اسمهای علی(30 دفعه) و
رضا(25 دفعه) و سعید(40 دفعه) و محسن(15 دفعه) بیشترین تکرار را در بین اسمها داشته باشند و من بخوام این این چهار اسم رو برگردونم طبق گفته شما نمیتونم از دستور top استفاده کنم
ایا دستوری تو اس کیو ال هست که بشه چهار اسمی که بیشترین تکرار رو دارند برگردوند؟
با تشکر

ar.shirazi
پنج شنبه 21 آذر 1387, 20:51 عصر
ممنون دوست عزیز
اگه من یه تیبل با 500 اسم متفاوت داشته باشم ومثلا اسمهای علی(30 دفعه) و
رضا(25 دفعه) و سعید(40 دفعه) و محسن(15 دفعه) بیشترین تکرار را در بین اسمها داشته باشند و من بخوام این این چهار اسم رو برگردونم طبق گفته شما نمیتونم از دستور top استفاده کنم
ایا دستوری تو اس کیو ال هست که بشه چهار اسمی که بیشترین تکرار رو دارند برگردوند؟
با تشکر
خواهش میکنم

بله، راهی هست.
از group by استفاده کنید

فرض میکنیم جدول شما دارای یک ID به صورت identity و حداقل یک فیلد Name باشد. کوئری زیر باعث میشود





select Name FROM Profile
WHERE ID IN(
SELECT TOP(5) MAX(ID) FROM Profile
group by Name
order by count(*) DESC)


اگر مشکلی داشتید بفرمایید تا پاسخ دهم

Dr.Saeed
شنبه 23 آذر 1387, 13:08 عصر
بله، راهی هست.
از group by استفاده کنید

فرض میکنیم جدول شما دارای یک ID به صورت identity و حداقل یک فیلد Name باشد. کوئری زیر باعث میشود



کد:
select Name FROM ProfileWHERE ID IN(SELECT TOP(5) MAX(ID) FROM Profilegroup by Nameorder by count(*) DESC)

اگر مشکلی داشتید بفرمایید تا پاسخ دهم

با تشکر دوست عزیز
آیا میتوان با کمک همین استور نامهای برگردانده شده را نزولی سورت کرد ؟
یا اینکه استوری جدا تعداد آنها را برگرداند و سپس سورت کند؟

ar.shirazi
شنبه 23 آذر 1387, 15:26 عصر
با تشکر دوست عزیز
آیا میتوان با کمک همین استور نامهای برگردانده شده را نزولی سورت کرد ؟
یا اینکه استوری جدا تعداد آنها را برگرداند و سپس سورت کند؟
خواهش میکنم

select Name FROM Profile
WHERE ID IN(
SELECT TOP(5) MAX(ID) FROM Profile
group by Name
order by count(*) DESC)
order by Name DESC

Dr.Saeed
شنبه 23 آذر 1387, 16:17 عصر
تشکر دوست عزیز
من در قسمتی از برنامه ام میخواهم به کاربر این اجازه را بدهم که بین دو تاریخی که میخواهد آماری از بیشترین تعداد رکوردها(مثلا همان 5 تکرار بیشتر) را بگیرد آیا راه حلی به نظرتون میرسه؟

ar.shirazi
یک شنبه 24 آذر 1387, 00:46 صبح
تشکر دوست عزیز
من در قسمتی از برنامه ام میخواهم به کاربر این اجازه را بدهم که بین دو تاریخی که میخواهد آماری از بیشترین تعداد رکوردها(مثلا همان 5 تکرار بیشتر) را بگیرد آیا راه حلی به نظرتون میرسه؟
با یک شرط where این کار را میتوانید انجام دهید



select Name FROM Profile
WHERE ID IN(
SELECT TOP(5) MAX(ID) FROM Profile
group by Name
order by count(*) DESC)
AND DateStart>=@DateStart AND DateEnd<=@DateEnd
order by Name DESC