是否可以使用mysql执行计算?
我有一个用于照片评级的DB表,希望检索评级最高的照片。我知道我需要根据评分从最高到最低的平均值来做这件事。DB表如下所示:是否可以使用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的平均值是否有意义?这
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 |
+----------------+---------------+-----------------+