2014-01-08 58 views
0

我有如下表:由總場比賽下令返回結果在同一列

+---------+------------+ 
| EntryID | CategoryID | 
+---------+------------+ 
|  11 |   15 | 
|  11 |   18 | 
|  186 |   15 | 
|  186 |   18 | 
|  186 |  334 | 
|  187 |   15 | 
|  187 |   18 | 
|  187 |  337 | 
|  278 |   15 | 
|  278 |   18 | 
|  278 |  337 | 
|  278 |  457 | 
+---------+------------+ 

我想獲得的比賽的相關程度的順序,這是CategoryID rows/CategoryIDs specified百分比結果。

我卡在哪裏就是這個計算需要在多個categoryID的查詢上工作。例如,如果我要查找categoryID 18,那麼entryID應該首先出現,因爲它具有50%的匹配百分比(請原諒我的陳詞濫調),則186或187排在第二位,匹配百分比爲33%(在我的使用案例中,排序並不重要),那麼278會以25%的匹配百分比排在最後。

我的問題是:有沒有辦法在一個/多個SQL查詢/查詢中進行這種排序? Java可以隨時使用,所以我可以用Java而不是MySQL進行排序,但是我想看看是否有純SQL解決方案。此外,有沒有更好的方法來計算我的情況下的相關性?

(?而只是爲了好玩,有一個更好的標題這個問題

+0

有一定的辦法,我只是不知道你想要什麼作爲答案......你能畫嗎?在你詢問的查詢已經運行後,所得的表格是否已經生成 – Daren

+0

@Daren我在找什麼? entryID的列表按相關性排序。有關示例,請參閱第2段。 – tyteen4a03

+0

問題的一個更好的標題可能是:如何計算sql中相對頻率值? (我認爲訂購是主要話題) – Aris2World

回答

3

它的聲音喜歡你想要的東西是這樣的:

select EntryID, count(*) 
from your_table 
group by EntryID 
order by count(*) asc 

更新:根據更新後的問題,這裏有一種方法來實現這一點:

select your_table.EntryID, count(*) as matches, sub_query.total_rows 
from your_table 
inner join (
    select EntryID, count(*) as total_rows 
    from your_table 
    group by EntryID 
) sub_query on sub_query.EntryID = your_table.EntryID 
where your_table.CategoryID = 18 
group by your_table.EntryID 
order by (count(*)/sub_query.total_rows) desc 
+0

我忘了澄清 - 我需要這個工作在多個'categoryIDs'而不是一個。 – tyteen4a03

+0

我已更新我的問題以反映我的情況 - 對不起! – tyteen4a03

+0

我更新了我的答案。 –