PDA

View Full Version : Query برای انتخاب عضو با بیشترین تعداد مقاله



seven7777777
سه شنبه 05 خرداد 1388, 16:22 عصر
دوستان سلام

من دو تا جدول دارم . یکی جدول اعضا و یکی جدول مقالات .
یک query می خوام که به من عضو با بیشترین تعداد تحقیق رو بده .query برای در آوردن تعداد تحقیقات هر کس و ترتیب آنها از زیاد به کم رو دارم اما نمی دونم چه جوری ردیف اولش رو انتخاب کنم .

حالا یا دومی رو ادامشو بگین و یا کلا یک جدید بگین ، البته لطفا .

newgoldenman
چهارشنبه 06 خرداد 1388, 11:21 صبح
سلام. اگه با دیتا ریدر میخونی، باید از متد Read استفاده كنی. كه بعد میدونم مشكلتو درست فهمیده باشم!

NewFoxStudent
چهارشنبه 06 خرداد 1388, 13:45 عصر
میشه اسم فیلدهای جدول ها رو اینجا بزارید و بعد بگید که توی جدول مقالات هر رکورد معرف یک مقاله از یک عضو هست یا اینکه تعداد مقالات هر عضو رو ذخیره میکنه

seven7777777
چهارشنبه 06 خرداد 1388, 14:37 عصر
جدول عضو شامل فیلدهای کد عضو - نام - نام خانوادگی
جدول مقالات شامل کد عضو ، نام مقاله

در جدول مقاله هر عضو می تونه n تا مقاله داشته باشه ( هر رکورد معرف یک مقاله ) . حالا من می خوام query بنویسم که بیاد و نام و نام خانوادگی کسی که بیشترین تعداد مقاله براش تو جدول مقالات ثبت شده رو بدست بیارم .

davoodrm666_666
چهارشنبه 06 خرداد 1388, 14:57 عصر
اگر جدول اعضا به صورت
Serial
Name
و جدول مقاله به صورت
Serial
UserRef
ArticleName
باشه
یعنی به ازا هر کاربر n مقاله در جدول مقاله وجود داشته باشه کد زیر جواب کارت رو می ده
T1 جدول اعضا و T2 جدول مقاله ها


SELECT T1.Name, COUNT(T2.UserRef) AS CountArticle
FROM T2 INNER JOIN
T1 ON T2.UserRef = T1.Serial
GROUP BY T1.Name

seven7777777
چهارشنبه 06 خرداد 1388, 18:34 عصر
خوب این یه لیست به من میده که کل اعضا رو با تعداد مقالات داره به ترتیب . در پست اول گفتم که این کد رو نوشتم اما نمی تونم اولین ردیفش رو انتخاب کنم البته منظورم تو SQL هست . یعنی با اجرای query فقط یه ردیف به من بده .
اینهمه ردیف واکشین نکنه بعد من فقط از اولیش استفاده کنم .

با تشکر

HamidNazari
پنج شنبه 07 خرداد 1388, 09:12 صبح
من یه نمونه براتون روی Pubs انجام دادم . فرضمون هم اینه که میخوایم ببینیم کدوم نویسنده بیشترین تعداد کتاب رو نوشته . البته توجه داشته باشین که قاعدتاً نباید انتظار فقط یک جواب داشته باشیم چون ممکنه برای مثال 3 نویسنده باشن که هر کدوم 5 کتاب نوشتن .


WITH
TitleCount(au_id, c)
AS
(
SELECT au_id, COUNT(au_id) AS c
FROM titleauthor
GROUP BY au_id
),
MaxTitleCount(au_id)
AS
(
SELECT MAX(c)
FROM TitleCount
)
SELECT au_fname, au_lname FROM authors
WHERE au_id IN
(
SELECT au_id FROM TitleCount
WHERE c =
(
SELECT * FROM MaxTitleCount
)
)آپدیت : اگه در هر صورت احتیاج به یه رکورد دارین خط SELECT au_fname, au_lname FROM authors رو به SELECT TOP 1 au_fname, au_lname FROM authors تغییر بدین .

NewFoxStudent
پنج شنبه 07 خرداد 1388, 13:13 عصر
من دو تا جدول درست کردم با نام های Members شامل mCode,mName,mFamily
و Article شامل mCode,artName
کوئری زیر رو روش اجرا کردم جواب داد


Select Top 1 M.mCode,M.mName,Max(artCount.cntArt) cnt from
(Select M.mCode,Count(A.mCode) cntArt From Members M
inner join Article A ON A.mCode = M.mCode
Group By M.mCode) artCount

Inner Join Members M ON M.mCode = artCount.mCode
Group By M.mCode,M.mName
Order By cnt desc