【问题标题】:How to use arithmetic operator to calculate sum如何使用算术运算符计算总和
【发布时间】:2019-06-06 16:07:11
【问题描述】:

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

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

Sanity 最近将 arithmetic operations 添加到 GROQ,但我不知道如何使用它们,而且文档很少。

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

【问题讨论】:

    标签: sanity groq


    【解决方案1】:

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

    "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 来说计算起来有些昂贵,而且有点冗长,所以我仍然对其他解决方案感兴趣。

    【讨论】:

    • 很高兴你知道了!您的解决方案看起来不错,不知道如何改进它。正如您所怀疑的,对于大量的审查文档,这可能确实会成为一个昂贵的查询。
    • 另外,请考虑将其勾选为已回答?让其他人更容易找到解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    相关资源
    最近更新 更多