在Rails应用程序中,我们有两个表:
products:
- id
- name
feedbacks
- id
- product_id
- rating因此,产品可以有许多反馈,有一个评级(1-5)。
我们想要做的是通过计算每个产品的反馈次数来得到最好的和最差的产品,使用(4-5)最好的和(1-2)最坏的反馈。
然而,我们也需要考虑产品的反馈总数,否则如果一个产品有比另一个产品更多的反馈,那么它最终可能是最好的,也可能是最差的。
作为一个例子,我们尝试了以下的‘应该’返回一个产品的列表,其中的反馈等级是4+,然后第一个元素将是最高的。
Product.joins(:feedbacks).group('feedbacks.rating').having('Max(rating) >= 4')第一个问题..。这是返回这个的正确方式吗?是否有更好的方法只返回一个记录,而不是返回一个ActiveRecord关系并提取第一个记录?
第二个问题..。我们如何考虑对产品的反馈数量?所以查询变成..。“将4+与产品反馈的总次数相比较”
发布于 2022-11-03 21:51:51
编写一个将计算质量排名的SQL查询听起来很吓人。
这听起来像是一个XY Problem,我会用另一种方式来处理它:
目标:
与其兄弟姐妹相比,Product需要有一个ranking。
我认为the mathematicians can better speak to是你选择设置rank的算法。
我计算rank的过程如下所示:
在Product
ranking列,该作业将执行“排名”calculation
Feedback时。https://stackoverflow.com/questions/74304238
复制相似问题