0

imdb のようなユーザーの投票に基づいて、最高の映画のリストを作成しています。私はこのSQLクエリでリストを作成しました:

 SELECT data_id, COUNT(point), SUM(point) 
 FROM voting_table
 WHERE data_type='1' 
 GROUP BY data_id 
 order by SUM(point)/COUNT(point) 
 DESC limit 100

これはうまくいきますが、投票数(ポイント)が順序に影響することも望んでいます。つまり、ある映画が平均 8 票で 10 票を獲得し、別の映画が平均 8 票で 5 票を獲得した場合です。より多くの票を獲得したものは、他のものよりも上にリストする必要があります。どうすればできますか?そして、私が書いたクエリはサーバーのパフォーマンスにとって効率的ですか?

4

3 に答える 3

0

関数がありAGVます。それを使用することをお勧めします。

平均で並べ替え、次にカウントまたは合計で並べ替えます

...
ORDER BY AVG(point) DESC, COUNT(point) DESC
...

パフォーマンスに関しては、データ構造を複雑にすることなくできることはあまりありません。あなたのサイトが imdb ほど人気にならない限り、このままで問題ありません。投票テーブルがスピードアップが必要なポイントを超えて大きくなった場合は、事前計算を開始する必要があります (映画テーブルのスコアを更新するトリガーを使用したリアルタイム更新、またはその専用の他の中間テーブル、他の方法)。

于 2013-03-06T11:36:53.803 に答える
0

コンマで区切って2番目の注文を追加するだけです。これを試してください

 SELECT data_id, COUNT(point), SUM(point) 
 FROM voting_table
 WHERE data_type='1' 
 GROUP BY data_id 
 order by SUM(point)/COUNT(point) ,COUNT(point)
 DESC limit 100
于 2013-03-06T11:27:23.353 に答える
0

order by句を次のように変更してみてください。

order by SUM(point)/COUNT(point) desc, COUNT(point) desc

現状では、クエリは効率的であるように見えます。

于 2013-03-06T11:27:28.033 に答える