是否可以使用mysql执行计算?

是否可以使用mysql执行计算?,mysql,sql,Mysql,Sql,我有一个用于照片评级的DB表,希望检索评级最高的照片。我知道我需要根据评分从最高到最低的平均值来做这件事。DB表如下所示: id rating rated_photo_id -- ------ ------------- 1 5 1 2 6 1 3 3 2 4 4 1 5 7 2 在SQL查询中执行此计算是否有效或甚至可能?如果没有,那么维护第二个表来存储每个照片id的平均值是否有意义?这

我有一个用于照片评级的DB表,希望检索评级最高的照片。我知道我需要根据评分从最高到最低的平均值来做这件事。DB表如下所示:

id  rating  rated_photo_id 
--  ------  ------------- 
1   5       1       
2   6       1
3   3       2
4   4       1
5   7       2

在SQL查询中执行此计算是否有效或甚至可能?如果没有,那么维护第二个表来存储每个照片id的平均值是否有意义?

这几乎适用于所有数据库。查看MySQL的聚合函数


特别针对您的问题。

是的,假设您在“rated\u photo\u id”列上有一个索引,那么计算平均值既简单又高效

 select rated_photo_id, AVG(rating) as average_rating 
       from photos group by rated_photo_id order by average_rating desc
对于特定照片,可以指定id:

 select rated_photo_id, AVG(rating) 
     from photos where rated_photo_id = 2 group by rated_photo_id 

理想情况下,您的索引(评级为\u photo\u id,评级)将覆盖这些查询,从而实现最快的执行。

您应该能够根据照片id进行分组,并在创建组时获得平均值

SELECT rated_photo_id , AVG(rating) as rating
FROM photos 
GROUP BY rated_photo_id
ORDER BY rating DESC

你不需要第二张桌子。评级表包含您需要的信息。使用:

输出:

+----------------+---------------+-----------------+
| rated_photo_id | AverageRating | NumberOfRatings |
+----------------+---------------+-----------------+
|              1 |        5.0000 |               3 |
|              2 |        5.0000 |               2 |
+----------------+---------------+-----------------+

是的,这是可能的,并且在大多数用例中都非常有效。事实上,从性能角度来看,db通常是实现这一点的最佳场所。RDBMS在跨大量行进行计算时非常高效。哇……我刚刚在1200多个条目上试用过,只花了毫秒。我没想到会这么快!谢谢你的帮助。
+----------------+---------------+-----------------+
| rated_photo_id | AverageRating | NumberOfRatings |
+----------------+---------------+-----------------+
|              1 |        5.0000 |               3 |
|              2 |        5.0000 |               2 |
+----------------+---------------+-----------------+