2015-06-14 100 views
0

我正在製作一款遊戲,其中涉及人們下載和評分用戶創建的地圖。如果他們喜歡/不喜歡它,他們可以選擇投票/降低地圖的投票率,也可以評估1-10分的難度。按首選平均值排序

在地圖瀏覽器中,他們可以選擇按照最高評分排序地圖。這是通過使用Laplace smoothing來完成的,因此它將upvotes的數量以及評分的總數都歸入排序,按(upvotes + 1)/(numRatings + 2)排序。這工作正常。

現在,還可以選擇按首選難度排序,人們可以從1-10中選擇一個值,然後按平均難度等級與優先等級的接近程度排序地圖。起初,我按ABS(preferred_difficulty - average_difficulty)排序,但這並不影響收視率。現在我使用((numRatings + 1) * (10 - ABS(average_difficulty - preferred_difficulty)) + 1)/(numRatings + 1.5)出於純粹的試驗和錯誤,這有點有用,但有時評級的數量超過了首選的難度,結果看起來很奇怪。

這是我需要幫助的 - 我無法弄清楚如何根據首選難度和平均難度之間的最小差異進行排序,同時將多個評分納入混合中,因爲我想要一個具有較高評分數的低難度三角洲最好的結果,而不是一個高評分計數的高點數,就像評級一樣。

例如,如果是這樣的數據:

AvgDifficulty  NumRatings 
     6.0     1 
     4.0    25 
     6.8     4 
     6.2     3 
     6.5    20 
     6.2     1 
     6.4     3 

而有人選擇6.4優選的困難,我希望它排序是這樣的:

AvgDifficulty  NumRatings 
     6.5    20 
     6.4     3 
     6.2     3 
     6.8     4 
     6.2     1 
     6.0     1 
     4.0    25 

基本上我想結果與頂部的首選難度接近,但我寧願顯示0.1分關閉的結果,以及很少評分的精確匹配評分。我知道在這種情況下,獲得「正確」結果可能不是很具體,我只是尋找一個起點。

感謝您的幫助!

+1

請編輯您的問題,並提供樣本數據和所需結果(在問題的表結構中)。沒有例子很容易誤解這種長時間的解釋。 –

+0

@GordonLinoff添加了一個示例。 – user3413457

回答

0

你有點含糊不清的問題。你需要一些方法來結合評分和計數。基本查詢是:

order by abs(avg_difficulty - 6.4) 

但是,您還想包括計數。你可以在上面定義了一個固定的樂隊,由順序排名這些:

order by (case when abs(avg_difficulty - 6.4) < 0.1) then numratings end) desc, 
     abs(avg_difficulty - 6.4) 

這個表達式結合一切從6.3 - 一組6.5和收視率的數量排序這些。第二個關鍵點按其差別排序。