ARRAY_SUM с условием - PullRequest
       7

ARRAY_SUM с условием

2 голосов
/ 29 апреля 2019

У меня есть такой документ

    {
        bills: [
             { 
                  id: "1",
                  total: 20.0
              },
              { 
                  id: "1",
                  total: 20.0
              },
              { 
                  id: "2",
                  total: 10.0
              }
         ]
    }

Я хотел бы сделать DISTINCT SUM общей суммы с разницей, основанной на свойстве id, но не смог найти и дать инструкцию для этого случая.

Для примера, ожидаемый итог составляет 30,0.

Ответы [ 2 ]

2 голосов
/ 29 апреля 2019

Используйте оператор ARRAY, чтобы выбрать, какие элементы массива вы хотите использовать.

https://docs.couchbase.com/server/6.0/n1ql/n1ql-language-reference/collectionops.html#array

Затем используйте ARRAY_DISTINCT () и ARRAY_SUM () для вычисления суммы.

https://docs.couchbase.com/server/6.0/n1ql/n1ql-language-reference/arrayfun.html#fn-array-distinct https://docs.couchbase.com/server/6.0/n1ql/n1ql-language-reference/arrayfun.html#fn-array-sum

1 голос
/ 29 апреля 2019

Какой из них вы выберете, когда «id»: «1» имеет разные значения

{
     bills: [
          { 
               id: "1",
              total: 20.0
          },
          { 
               id: "1",
              total: 30.0
          },
          { 
               id: "2",
              total: 10.0
          }
    ]
}

Используя выражение подзапроса https://docs.couchbase.com/server/6.0/n1ql/n1ql-language-reference/subqueries.html, вы можете использовать полную функцию выбора массивов.

В случае других значений в следующем запросе используется MAX.Это на сумму документа

SELECT  ARRAY_SUM((SELECT RAW MAX(b.total) FROM d.bills AS b GROUP BY b.id)) AS s
FROM default AS d
WHERE ......
...