2011-05-02 14 views
0

ユーザーの各イベントの評価を格納するMYSQLテーブルがあります。イベントテーブルのevent_ratingには1〜10が格納されています。どのような私が見つけようとしていることは、このような投票や評価の数に基づいて、最高の正確な評価です:MYSQL評価アルゴリズム

SELECT 
c.userid, 
c.user_name, 
COUNT(d.event_rating) AS votesCount, 
AVG(d.event_rating) AS votesAvg, 
SUM(d.event_rating) AS tsum, 
COUNT(d.event_rating)*AVG(d.event_rating)/COUNT(d.event_rating) as totalRating 
FROM events d JOIN users c ON d.userid = c.userid WHERE (d.userid = '2') GROUP BY d.userid ORDER BY totalRating DESC 

私は、ユーザーのための2件のダミー評価、10と5と他の格付けとの1を追加しました。

結果は以下の通りです:

userid  user_name  votesCount  votesAvg tsum  totalRating 
    2 Rahul Khanna   2   7.5000  15  7.50000000 

は、正確な、と私はそれが正しい計算だということですか?

--- EDIT ---

COUNT(d.event_rating)*AVG(d.event_rating) as totalRating

userid user_name votesCount votesAvg tsum totalRating 
1  Rita Agnihotri 9  4.8889  44  44.0000 
4  Roger Myers  6  3.5000  21  21.0000 
2  Rahul Khanna  2  7.5000  15  15.0000 
3  Daniel Springs 4  3.5000  14  14.0000 
5  Chun Tanakat  3  3.0000  9  9.0000 
を使用した COUNT(d.event_rating)*AVG(d.event_rating)/COUNT(d.event_rating) as totalRating

userid user_name votesCount votesAvg tsum totalRating 
2  Rahul Khanna  2  7.5000  15  7.50000000 
1  Rita Agnihotri 9  4.8889  44  4.88888889 
3  Daniel Springs 4  3.5000  14  3.50000000 
4  Roger Myers  6  3.5000  21  3.50000000 
5  Chun Tanakat  3  3.0000  9  3.00000000 

を使用して、いくつかのより多くの結果

を投稿

--- MORE ---

私の代わりに以下を使用する必要がありますか。私は必要なもの

COUNT(d.event_rating)*AVG(d.event_rating)/10 as totalRating 

も同様に考慮votesCountを置くと評価は1から10までの間でなければならないこと、合計の評価を計算するための正確な方法です。

---詳細---

は、私は1人のテーブルのユーザー別のイベントがあり、ユーザーは新しいイベントを追加して、それらのイベントを評価することができます。イベントテーブルには、eventID、userid、event_ratingカラムがあります。したがって、各イベントは、ユーザーが作成したイベントの評価を保持できます。私が望むのは、すべてのイベントの評価を計算してそのユーザーの最大(合計)評価を得ることです。ユーザーが作成したイベントの数に関わらず、合計の評価が1から10の間になり、10を超えないようにします。それは可能ですか?解決策やアイデアがない場合は?

おかげで読んでください:)

答えて

2

この愚かなクエリの部分は何ですか?

COUNT(d.event_rating)*AVG(d.event_rating)/COUNT(d.event_rating) as totalRating 

これはあなただけでAVG(d.event_rating)

あなたが本当に何をしたいかを取得する必要が

bは常に何

(a*b)/aではありません?

+0

さらに詳しい情報と結果で私の質問が更新されました。 – Zubair1

+0

数学的にも問題は同じです: 'COUNT(d.event_rating)* AVG(d.event_rating)/COUNT(d.event_rating)as totalRating'は' AVR(d.event_rating)as totalRating'と同じです。 * b)/ a'は 'b'です。 –

+0

私の解決策は何か分かりません。より明確にするために、私が達成しようとしていることについては、私の質問をより詳細に更新しました。 – Zubair1