MySQL查询行/列的区别

时间:2017-03-19 21:57:13

标签: mysql sql

我正在尝试编写执行以下操作的MySQL查询:

我有一张看起来像这样的表

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

我需要找到每个 Id 为2的 t 列的总和,并从中减去 t 列的总和每个 Id 为1。

因此,对于此示例, Id 1的总和为19, Id 2的总和为27。

我希望输出为8。

我想这句话看起来类似于:

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

但这显然不是正确的语法。

我为糟糕绘制的表道歉,我仍然是stackoverflow的新手。

3 个答案:

答案 0 :(得分:1)

您可以使用CASE声明:

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

希望它按原样工作......我只有SQL Server可以测试,但MySQL的语法应该是相同的。

答案 1 :(得分:1)

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

答案 2 :(得分: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;