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

只需添加您想用逗号分隔的第二个订单。试试这个

 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 回答
0

有功能AGV,我建议你使用它。

按 avg 排序,然后按 count 或 sum

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

就性能而言,如果不使数据结构复杂化,您无能为力。除非您的网站像 imdb 一样受欢迎,否则应该没问题。如果您的投票表增长超过需要加速的点,那么您需要开始预先计算东西(使用更新电影表或其他一些专门用于该目的的中间表中的分数的触发器进行实时更新,其他方法)

于 2013-03-06T11:36:53.803 回答