PDA

View Full Version : مقایسه مقادیر



فؤاد
جمعه 22 فروردین 1393, 01:22 صبح
سلام

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

ساختار جداول موجود
---------------------------------------------------------
Tbl_articles

ID (کد مقاله)
Article_Title (عنوان مقاله)
---------------------------------------------------------
Tbl_articles_Keywords_Index

ID (کد کلمه)
Article_ID(کد مقاله)
Keyword (کلمه)
ReUse (میزان تکرار کلمه در مقاله)
---------------------------------------------------------

گزارش مورد نیاز (مقایسه کلمات مقاله با کد (ID) بیست با کلمات مقالاتی که کدشان (ID) آنها سی، چهل، پنجاه و هفتاد)

نمایش مقدار اشتراک کلمات هر مقاله با مقاله مورد نظر

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

با تشکر

مهرداد صفا
جمعه 22 فروردین 1393, 17:09 عصر
سلام.
در مورد سوال شما دچار ایهام شدم.
آیا صرفا تعداد کلماتی که در هر دو مقاله وجود دارد رو می خواهید(صرف نظر از تعداد تکرار)؟ و یا اینکه کلمات مشترک با در نظر گرفتن تعداد تکرار کلمات مورد نظر شماست؟
در هر حال با این کوئری هر دو مورد رو به دست می آورید:

select k2.Article_id , Count(k1.keyword) as words,
sum(case when k1.reuse>=k2.reuse then k2.reuse when k2.reuse>k1.reuse then k2.reuse-k1.reuse end ) as AllWordswithRepeats
from
tbl_articles_keywords_index k1 join tbl_articles_keywords_index k2
on k1.keyword=k2.keyword
where( k1.article_id=20) and(( k2.Article_id=30) or
(k2.article_id=40) or
(k2.article_id=50)or
(k2.article_ID=70))
group by K2.Article_ID;

فؤاد
شنبه 23 فروردین 1393, 01:14 صبح
سلام و تشکر از پاسخ شما / تا مقدار زیادی کوئری شما کمکم کرد

اگر کوئری را به شکل زیر بخواهم ....ممکن است کمکم کنید

کوئری اول
------------
کد مقاله | لغات مشترک (به عدد) | لغات غیر مشترک ( به عدد ) | لغات مشترک (به درصد) | لغات غیر مشترک (به درصد) |


کوئری دوم
-----------
لیست واژه های غیر مشترک مقاله مورد نظر با مقالات منتخب


از راهنمایی و کمکتون یکدنیا ممنونم

مهرداد صفا
دوشنبه 25 فروردین 1393, 22:31 عصر
سلام. خواهش می کنم.

کوئری اول:
کافیه تعداد کل کلمات رو بگیرید، تعداد کلمات مشترک رو هم که در کوئری قبلی داشتیم؛
حالا:
تعداد نامشترکها=تعداد کل-تعداد مشترکها
درصد اشتراک=(تعداد مشترککها * 100) تقسیم بر تعداد کل
...
به این صورت:

With CTE as
(select article_ID, Sum(reuse) as WordCount from Tbl_Articles_keywords_index GROUP BY ARTICLE_ID)
SELECT CTE.ARTICLE_ID ,TBL.TEDADMOSHTARAK
,((TBL.tedadMoshtarak*100)/CTE.WordCount) as DarsadMoshtarak
,(CTE.wordCount-TBL.tedadMoshtarak) as TedadNaMoshtarak
,(((Cte.WordCount-Tbl.TedadMoshtarak)*100)/CTE.WordCount) as DarsadNaMoshtarak
FROM CTE JOIN
( select k2.Article_id, sum(case when k1.reuse>=k2.reuse then k2.reuse when k2.reuse>k1.reuse then k2.reuse-k1.reuse end ) as TedadMoshtarak
from
tbl_articles_keywords_index k1 join tbl_articles_keywords_index k2
on k1.keyword=k2.keyword
where( k1.article_id=20) and(( k2.Article_id=30) or
(k2.article_id=40) or
(k2.article_id=50)or
(k2.article_ID=70))
group by K2.Article_ID) TBL
on cte.article_id=tbl.article_id;

مهرداد صفا
چهارشنبه 27 فروردین 1393, 23:45 عصر
سلام.
کوئری دوم:
در یک Sub query چک کنید که در صورت موجود نبودن کلمه در مقاله شماره 20، کلمه به همراه شماره مقاله انتخاب شود.


with CTE as
(SELECT Article_ID,Row_Number() over(partition by article_ID order by keyword) as RowNumber,Keyword
FROM Tbl_Articles_Keywords_index AS k2
WHERE (NOT EXISTS
(SELECT Keyword
FROM Tbl_Articles_Keywords_index k1 WHERE (Article_ID = 20)
and(keyword=K2.Keyword)))
and((article_ID=30)
or( Article_ID=40)
or (article_ID=50)
or (Article_ID=70)))
select * from
(select RowNumber,Article_ID,Max(keyWord) word from CTE
group by Article_ID,RowNumber) sourceTable
pivot
(max(word) for Article_ID in ([30],[40],[50],[70])) pivotTable;


خروجی:
rowNumber 30 40 50
1 word-30-1 word-40-1 word-50-1
2 word-30-2 word-40-2 word-50-2