PDA

View Full Version : پیدا کردن کتابهایی که بیشترین تکرار را دارند



JaVa
یک شنبه 29 بهمن 1391, 23:36 عصر
سلام و درود بر شما.

دوستان این کد که پایین گذاشتم می خوام که تعداد کتابهایی که بیشترین بار تکرار شدند در جدول امانات رو بهم نشون بده :

SELECT b_code, b_title, b_writer, b_translator, b_publish, b_group, b_lang
FROM TBL_Book
WHERE (b_code IN
(SELECT b_code
FROM TBL_Trust
GROUP BY b_code
HAVING (COUNT(b_code) > 2)))

این کویری تا اینجاش(یعنی به تعداد مشخصی که من در مثال مقدارش 2 قرار دادم بهم کتابهایی که بیش از دو بار در جدول امانات تکرار شدند رو بهم نشون میده.)

حالا بنظر شما کاربر خودش بیاد مقدار 2 رو وارد کنه یا اینکه از میانگین تعداد کتاب های که امانت داده شدند بعنوان اون مقدار که من در مثال 2 گذاشتم استفاده کنم.

در ضمن من برای میانگین گرفتن تعداد کتاب هایی که امانت داده شدند خیلی گیرم

میشه راهنمایی کنید.:لبخندساده:

JaVa
دوشنبه 30 بهمن 1391, 09:29 صبح
سلام و خسته نباشید.


SELECT b_code, b_title, b_writer, b_translator, b_publish, b_group, b_lang
FROM TBL_Book
WHERE (b_code IN
(SELECT b_code
FROM TBL_Trust
GROUP BY b_code
HAVING (COUNT(b_code) > 2)))


select اولی که نوشته شده میاد مشخصات کتاب ها رو از جدول کتاب ها انتخاب می کنه . در قسمت دوم که یک select تو در تو هست اومدم کتاب رو از جدول امانات گروه بندی کردم به شرط این که تعداد بار تکرار داده ها بیشتر از دو بار باشه.

لطفا راهنمایی کنید.

Reza_Yarahmadi
دوشنبه 30 بهمن 1391, 12:14 عصر
حالا بنظر شما کاربر خودش بیاد مقدار 2 رو وارد کنه یا اینکه از میانگین تعداد کتاب های که امانت داده شدند بعنوان اون مقدار که من در مثال 2 گذاشتم استفاده کنم.
هر دو پیشنهاد میتونه مورد استفاده قرار بگیره. ولی اگه قرار باشه 'کتاب گیرنده' خروجی این دستور رو ببینه بهتر اینه که بر اساس میانگین نمایش داده بشه.
در صورت اینکه بخواید بر اساس تمامی کتاب های موجود میانگین بگیرید (چه کتابهایی که امانت گرفته شده اند و چه نشده اند)
Select AVG(TCount) From (
Select Count(ISNULL(T.BookID, NULL))TCount
From BOOKS B LEFT OUTER JOIN Trust T
ON T.BookID = B.BookID
Group BY B.BookID
) tbl

محمد سلیم آبادی
دوشنبه 30 بهمن 1391, 18:03 عصر
هر دو پیشنهاد میتونه مورد استفاده قرار بگیره. ولی اگه قرار باشه 'کتاب گیرنده' خروجی این دستور رو ببینه بهتر اینه که بر اساس میانگین نمایش داده بشه.
در صورت اینکه بخواید بر اساس تمامی کتاب های موجود میانگین بگیرید (چه کتابهایی که امانت گرفته شده اند و چه نشده اند)
Select AVG(TCount) From (
Select Count(ISNULL(T.BookID, NULL))TCount
From BOOKS B LEFT OUTER JOIN Trust T
ON T.BookID = B.BookID
Group BY B.BookID
) tbl

ISNULL(T.BookID, NULL)
اگر null بود بازم null بشه؟
:لبخندساده:

Reza_Yarahmadi
سه شنبه 01 اسفند 1391, 07:19 صبح
اگر null بود بازم null بشه؟
حق با شماست!!:گیج:
اول از تابع SUM و مقدار 0 صفر استفاده کردم. بخاطر اینکه ممکن بود با ساختار جدول دوستمون همخونی نداشته باشه به Count تغییرش دادم ولی به این موضوع توجه نکردم.