Saturday, 15 February 2014

mysql - How to sum amounts according their ID-s and add the results to a new column on an existing table -



mysql - How to sum amounts according their ID-s and add the results to a new column on an existing table -

i have database table (the table below) grow fast has more 4 1000000 rows

this table taking about:

# name type collation attributes null default action 1 user_id int(11) no none alter change drop drop browse distinct values browse distinct values primary primary unique unique show more actions more 2 amount decimal(16,8) no none alter change drop drop browse distinct values browse distinct values primary primary unique unique show more actions more 3 aff int(11) no 0 alter change drop drop browse distinct values browse distinct values primary primary unique unique show more actions more 4 jackpot int(11) no 0 alter change drop drop browse distinct values browse distinct values primary primary unique unique show more actions more 5 paidout int(11) no 0 alter change drop drop browse distinct values browse distinct values primary primary unique unique show more actions more 6 type int(11) no 0 alter change drop drop browse distinct values browse distinct values primary primary unique unique show more actions more 7 created timestamp no current_timestamp alter change drop drop browse distinct values browse distinct values primary primary unique unique show more actions more

i run query sum amounts user_id , results

select user_id, sum(amount) trans grouping user_id;

my question how can add together these results (sum-s)to existing table have same user ids , save these sum-s there

the existing table have has structure

# name type collation attributes null default action 1 id int(4) no none auto_increment alter change drop drop browse distinct values browse distinct values primary primary unique unique show more actions more 2 balance int(11) no none alter change drop drop browse distinct values browse distinct values primary primary unique unique show more actions more 3 ads varchar(60) latin1_swedish_ci no none alter change drop drop browse distinct values browse distinct values primary primary unique unique show more actions more 4 ip varchar(85) latin1_swedish_ci no alter change drop drop browse distinct values browse distinct values primary primary unique unique show more actions more 5 hash varchar(150) latin1_swedish_ci no none alter change drop drop browse distinct values browse distinct values primary primary unique unique show more actions more 6 email varchar(150) latin1_swedish_ci no none alter change drop drop browse distinct values browse distinct values primary primary unique unique show more actions more 7 aff int(11) no 0 alter change drop drop browse distinct values browse distinct values primary primary unique unique show more actions more 8 int(11) no 0 alter change drop drop browse distinct values browse distinct values primary primary unique unique show more actions more 9 timestamp bigint(20) unsigned no 0 alter change drop drop browse distinct values browse distinct values primary primary unique unique show more actions more

i prefer place sums on new column after id column.

you can following:

alter table table2 add together column thesum decimal(16, 8); update table2 t2 set thesum = (select sum(amount) table1 t1 t2.user_id = t1.user_id)

now, there issues this. when values alter in first table, not alter in sec table. create happen, need utilize trigger re-adjust values.

often, recommended utilize views such process. however, not particularly efficient. guess want summarize values performance reasons. if so, careful keeping values consistent.

edit:

to add together in sum, do:

update table2 t2 set thesum = thesum + coalesce((select sum(amount) table1 t1 t2.user_id = t1.user_id), 0);

mysql sql

No comments:

Post a Comment