如何使用算术运算符计算和
How to use arithmetic operator to calculate sum
我有一个 review
类型,它的 rating
字段包含从 1 到 5 的 number
。现在我想计算平均评分。相关架构:
{
name: 'rating',
title: 'Rating',
validation: Rule => Rule.required(),
type: 'number'
},
Sanity 最近将 arithmetic operations 添加到 GROQ,但我不确定如何使用它们,而且文档很少。
- 是否可以使用算术运算计算所有评分的总和?如果可以,怎么做?
- 您能否将总和除以同一查询中所有评论的数量?
我找到了一个解决方案,真的很简单。您分别数出每颗星星,然后将它们相加并除以总数。
"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 来说计算起来有点昂贵,而且有点冗长,所以我仍然对其他解决方案感兴趣。
我有一个 review
类型,它的 rating
字段包含从 1 到 5 的 number
。现在我想计算平均评分。相关架构:
{
name: 'rating',
title: 'Rating',
validation: Rule => Rule.required(),
type: 'number'
},
Sanity 最近将 arithmetic operations 添加到 GROQ,但我不确定如何使用它们,而且文档很少。
- 是否可以使用算术运算计算所有评分的总和?如果可以,怎么做?
- 您能否将总和除以同一查询中所有评论的数量?
我找到了一个解决方案,真的很简单。您分别数出每颗星星,然后将它们相加并除以总数。
"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 来说计算起来有点昂贵,而且有点冗长,所以我仍然对其他解决方案感兴趣。