我正在尝试根据代表其类别的另一列从表中减去数据。
例如:
+----+--------+----------+
| ID | Amount | Category |
+----+--------+----------+
| 1 | 100 | Fish |
+----+--------+----------+
| 2 | 200 | Meat |
+----+--------+----------+
| 3 | 300 | Metal |
+----+--------+----------+
| 4 | 400 | Paper |
+----+--------+----------+
| 5 | 500 | Glass |
+----+--------+----------+
我想将玻璃和肉和鱼的数量相减
我能够编写一个简单的查询来相互减去数据,但是我想知道是否存在一种简化查询的方法。
我写的代码:
create table calc(
x int,
y int,
z varchar
);
insert into calc values(1, 100, 'Fish');
insert into calc values(2, 200, 'Meat');
insert into calc values(3, 300, 'Metal');
insert into calc values(4, 400, 'Paper');
insert into calc values(5, 500, 'Glass');
select round(sum(y),2)
-(select round(sum(y),2) from calc where z = 'Fish')
-(select round(sum(y),2) from calc where z = 'Meat')
from calc
where z = 'Glass'
答案 0 :(得分:2)
您可以只使用条件聚合:
select sum(case when z in ('Fish', 'Meat') then y
when z in ('Glass') then - y
end)
from calc
where z in ('Fish', 'Meat', 'Glass');
严格来说,where
子句不是必需的,但是如果您拥有z
的大量值,则可以使查询的性能更高。