2

我有一个包含从 1 到 5review的字段的类型。现在我想计算平均评分。相关架构:ratingnumber

    {
      name: 'rating',
      title: 'Rating',
      validation: Rule => Rule.required(),
      type: 'number'
    },

Sanity 最近向 GROQ 添加了算术运算,但我不确定如何使用它们,而且文档很少。

  1. 是否可以使用算术运算来计算所有评分的总和?如果是这样,怎么做?
  2. 您还可以将总和除以同一查询中所有评论的数量吗?
4

1 回答 1

2

我找到了一个解决方案,真的很简单。您单独计算每颗星,然后将它们相加并除以总数。

"rating":
  (
    (count(*[_type=='review' && references(^._id) && rating == 1]) * 1) +
    (count(*[_type=='review' && references(^._id) && rating == 2]) * 2) +
    (count(*[_type=='review' && references(^._id) && rating == 3]) * 3) +
    (count(*[_type=='review' && references(^._id) && rating == 4]) * 4) +
    (count(*[_type=='review' && references(^._id) && rating == 5]) * 5)
  ) / count(*[_type=='review' && references(^._id)])

我想这对于 Sanity 来说计算起来有点昂贵,而且有点冗长,所以我仍然对其他解决方案感兴趣。

于 2019-01-12T18:14:00.340 回答