2017-03-19 75 views
0

我想寫一個MySQL查詢執行以下操作:MySQL查詢行/列差

我有一個表,看起來像這樣

Id t 
----------- 
1  1 
2  4 
1  6 
2  9 
1  12 
2  14 

我需要找到的總和列的2每個編號,並從它減去列的總和爲標識的各1

所以在這個例子中,標識 1總和爲19,和標識 2之和爲27

我希望的輸出則是8

我想象的聲明看起來類似於:

SELECT sum(t) WHERE Id = 2 - sum(t) WHERE Id = 1; 

但是,這顯然是不正確的語法。

而我很抱歉繪製不好的表,我仍然是新的stackoverflow。

回答

1

你可以使用一個CASE語句:

SELECT 
    SUM(CASE 
     WHEN Id = 2 THEN t 
     WHEN Id = 1 THEN 0 - t 
     ELSE 0 
    END) AS mySum 
FROM myTable 

希望這可以作爲-是......我只有SQL服務器上測試,但語法對於MySQL應該是相同的。

+0

這個工作!非常感謝你! – Schnagl

1
SELECT SUM(IF(`id` = 2, t, 0)) - SUM(IF(`id` = 1, t, 0)) as `result` FROM `table` 
0

取決於你的桌子有多大。如果是小的或者你可以做沒有索引:

select sum(if(Id=2,t,if(Id=1,-t,0))) 
from data; 

如果你有足夠的行並在列ID的索引:

select sum(id2)-sum(id1) 
from (
    select 0 as 'id1', sum(t) as 'id2' 
    from data 
    where id=2 
    union 
    select sum(t) as 'id1', 0 as 'id2' 
    from data 
    where id=1 
) as d;