Как обновить таблицу суммой чисел на основе определенного поля?

# #sql #google-bigquery #sql-update

Вопрос:

Я написал код ниже, но, основываясь на моем reseacrh, нет возможности использовать Group by в обновлении.

Мой код:

 update customer
set customer.cust_balance= sum(invoice.inv_amount)
where customer.cust_num=invoice.cust_num
group by invoice.cust_num
 

Я думаю, что мне следует сделать что-то подобное ниже, но я не уверен, что это полностью верно:

 update customer
set customer.cust_balance= (select sum(invoice.inv_amount) from invoice
                            where customer.cust_num=invoice.cust_num
                            group by invoice.cust_num)
 

Я считаю, что приведенный выше подзапрос не будет выполнять правильную работу. Любые советы или помощь будут оценены по достоинству

Комментарии:

1. пометьте свою СУБД ,пожалуйста, также ваш второй запрос выглядит нормально

2. Конечно, я его добавил . спасибо, что напомнили мне

Ответ №1:

Ваша версия будет работать, но лучше написать ее как:

 update customer
    set cust_balance = (select sum(i.inv_amount)
                        from invoice i
                        where customer.cust_num = i.cust_num
                       );
 

Другими словами, предложение о корреляции является достаточным. Вам это тоже не нужно GROUP BY .

Комментарии:

1. Спасибо, Гордон, что произойдет, если я добавлю группу по? останутся ли результаты такими же, как и без группировки по?

2. @mohamadatar да, это так. условие where customer.cust_num = i.cust_num уже гарантирует нужные вам записи, и этого достаточно

3. Спасибо @eshirvana