Как использовать арифметический оператор для вычисления суммы - PullRequest
0 голосов
/ 11 января 2019

У меня есть тип review с полем rating, которое содержит number от 1 до 5. Теперь я хотел бы подсчитать средний рейтинг. Соответствующая схема:

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

Sanity недавно добавил арифметических операций в GROQ, но я не уверен, как их использовать, и документации очень мало.

  1. Можно ли рассчитать сумму всех рейтингов с помощью арифметической операции? Если да, то как?
  2. Можно ли разделить сумму на количество всех отзывов в одном запросе?

1 Ответ

0 голосов
/ 12 января 2019

Я нашел решение, довольно простое на самом деле. Вы подсчитываете каждую звезду по отдельности, а затем суммируете их и делите их на общее количество.

"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 это довольно дорого, и это немного многословно, поэтому я все еще заинтересован в других решениях.

...