'How do I get a data from one table to another but with calculations?
I have two tables: "Customer" and "Order". The "Customer" table has an attribute called noOfPurchases, and the "Order" table has an attribute called quantity.
How do I UPDATE the Customer table in the way that, every customer will have a sum of their all orders quantity. For example one time there is a order of 5 items and another record with same CustomerID with 12 items. So it means noOfPurchases in the Customers table should be 17. And all customers data should be updated it is not that I should put as a input customerID one by one. So how can I do that?
Order
| ISBN | customerID | quantity |
|---|---|---|
| 8670081874189 | 2901 | 30 |
| 333488387049 | 2901 | 20 |
| 6137027197872 | 3421 | 18 |
| 333488387049 | 3683 | 15 |
Customer
| customerID | c_firstname | c_surname | noOfPurchases |
|---|---|---|---|
| 2901 | john | smith | null |
| 3421 | lisa | jones | null |
| 3683 | alan | jenkins | null |
Solution 1:[1]
This is a straightforward multi table UPDATE as described in the manual page https://dev.mysql.com/doc/refman/8.0/en/update.html
update customer
join (select customerid, sum(quantity) qty from `orrder` group by customerid) csum
on customer.customerid = csum.customerid
set nofpurchases = csum.qty;
You can either run this manually or periodically using https://dev.mysql.com/doc/refman/5.7/en/event-scheduler.html
or if you wish to update on an insert to orrder use a trigger https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html
delimiter $$
create trigger t after insert on `orrder`
for each row
begin
update customer
set nofpurchases = nofpurchases + new.quantity
where customer.customerid = new.customerid;
end $$
delimiter ;
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | P.Salmon |
