2016-02-17 27 views
3

这是我的表如何对mysql进行垂直求和?

ID angka1 angka2 
1 80  20 
2 10  20 
3 10  20 
4   0 

我想垂直总结angka1,所以angka1对ID 4的值是100,我已经与下面的代码和工程尝试,但我希望有一个简单的,因为我有另一个表(这个只是原型)有很多ID,而且这段代码会写很长时间。

update halooo set angka1 = (
    select sum(db1+db2+db3) from(
     select 
     (select sum(angka1) from halooo where id=1)db1, 
     (select sum(angka1) from halooo where id=2)db2, 
     (select sum(angka1) from halooo where id=3)db3 
     )total 
    ) 
    where id = 4 

我试着用这一个,但这不是代码更新我的表,

update halooo 
set 
angka1=(
    select sum(angka1) from(
     select sum(angka1) from halo) a 
    ) 
where id=4 

可有人点哪里是我的错?

+0

请更多spesific?只需使用'SELECT SUM(column_name)FROM table_name;'在这里http://www.w3schools.com/sql/sql_func_sum.asp –

回答

2

试试这个

UPDATE halooo SET angka1 = (select SUM(angka1) from (SELECT * FROM halooo) as h WHERE id != 4) WHERE id = 4 

这应该对你的问题的工作,如果我理解正确的你。它将更新列angka1行id 4与列angka1中所有行的总和,除了行ID 4

+0

我得到了一个错误 #1093 - 你无法在FROM子句中指定目标表'halooo'进行更新 – ridims

+0

我更新我的答案根据http://stackoverflow.com/questions/4429319/you-cant-specify-target-table-for-update-in-from-clause/14302701#14302701 – eren

+0

谢谢,它的工作原理! :d – ridims

1

尝试;

update halooo h, 
(
    select sum(COALESCE(angka1, 0)) sum_val 
    from halooo 
    WHERE id != 4 
) x 
set h.angka1 = x.sum_val 
where h.id = 4; 

demo

+0

我不知道如何处理求和空值,因为一些DBMS会使整个和为空,所以我会添加sum(coalese(angka1 ,0)) – sagi

+0

@sagi。更新。 ~~谢谢~~ – Praveen

+0

@Praveen此代码工作,但价值在增加,在第一次运行,值是100(这是我想要的),然后我再次运行它的值变为200, 谢谢虽然 – ridims