簡體   English   中英

按兩列排序 - 使用最高評級平均值和最高評級

[英]Order By Two Columns - Using Highest Rating Average with Most Ratings

我想顯示最高平均評分(rating_avg)和評分數(rating_count)。 使用我當前的腳本,它顯示最高的平均評級(DESC),無論有多少評級,這對我的訪問者來說是無用的。

例如,它顯示:

  1. 項目1 - 5.0(1個評分)
  2. 第2 - 5.0(2個評級)

當它應該通過評級平均值和評級數量來顯示評分最高的10個項目,例如:

  1. 項目1 - 4.5(356評級)
  2. 第2 - 4.3(200個評分)
  3. 項目3 - 4.0(400評級)

這就是我現在所擁有的:

$result = mysql_query("SELECT id, filename, filenamedisplay, console_dir, downloads, rating_avg, rating_count FROM files WHERE console_dir = '".$nodash."' ORDER BY rating_avg DESC LIMIT 10");

謝謝,我提前感謝任何幫助!

這是一個微妙的問題,也是統計學中的一個問題。 我所做的通常是將評級降級一個標准誤差。 這些並不完全是比例,但我認為可以應用相同的想法。

您可以使用“p * q除以n的平方根”方法計算出來。 如果你不明白這一點,谷歌“一定比例的標准錯誤”(或者我可能會建議“使用SQL和Excel進行數據分析”中的第三章更詳細地解釋這一點):

SELECT id, filename, filenamedisplay, console_dir, downloads, rating_avg, rating_count
FROM files cross join
     (select count(*) as cnt from files where console_dir = '".$nodash."') as const
WHERE console_dir = '".$nodash."'
ORDER BY rating_avg/5 - sqrt((rating_avg/5) * (1 - rating_avg/5) / const.cnt) DESC
LIMIT 10;

在任何情況下,看看該公式是否適合您。

編輯:

好的,讓我們將其改為平均值的標准誤差。 我應該第一次這樣做,但我認為rating_avg是一個比例。 公式是標准偏差除以樣本大小的平方根。 我們可以得到const子查詢中的總體標准差:

     (select count(*) as cnt, stdev(rating_avg) as std from files where console_dir = '".$nodash."') as const

這導致:

order by rating_avg - std / sqrt(const.cnt)

這可能有效,但我寧願每組中有標准偏差而不是整體人口標准偏差。 但是,它會將評級降低一個與樣本大小成比例的量,從而改善您的結果。

順便說一下,刪除一個標准偏差的想法是相當隨意的。 我剛剛發現它產生了合理的結果。 您可能更願意采用標准差的1.96倍來獲得置信區間的95%下限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM