Как использовать арифметический оператор для вычисления суммы
У меня есть review
введите с rating
поле, содержащее number
от 1 до 5. Теперь я бы хотел посчитать средний рейтинг. Соответствующая схема:
{
name: 'rating',
title: 'Rating',
validation: Rule => Rule.required(),
type: 'number'
},
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 это довольно дорого, и это довольно многословно, поэтому я все еще заинтересован в других решениях.