XQuery — суммировать атрибуты для всех элементов, которые имеют другое конкретное значение атрибута

#xquery-3.0

#xquery-3.0

Вопрос:

Мне нужно добавить баланс для каждого типа продукта, чтобы остался один элемент с общим балансом для типа продукта

Это то, что у меня есть

 let $input := <products>
                <prod balance="20000" code="car"/>
                <prod balance="50000" code="house"/>
                <prod balance="50000" code="car"/>
              </products>         
       let $sum_val_car :=  sum($input//prod/@balance )
       let $count_val_car := count($input//prod[@code='car'])
       let $sum_val_house :=  sum($input//prod/@balance)
       let $count_val_house := count($input//prod[@code='house'])
       
       
  return  <products>
            <prod count="{$count_val_car}" balance="{$sum_val_car}" code="car"/>
            <prod count="{$count_val_house}" balance="{$sum_val_house}" code="house"/>
         </products>
  

Мне нужно изменить $sum_val_car и $sum_val_house каким-то образом суммировать только элементы с code атрибутом eqaul до соответствующего значения. Есть ли способ сделать это?

Ответ №1:

 $input//prod[@code='house']/@balance
  

Выбирается balance из prod элементов с code =’house’

Решение тогда

 let $sum_val_house :=  sum($input//prod[@code='house']/@balance)