计算列内的差异
Calculating variances within a column
注:第一个table是当前数据集,第二个table是请求的结果。
我正在考虑创建临时的 table X 和 Y,它们分别具有销售和销售与服务价值数据,并使用连接计算方差。我想知道这是否是 right/convenient 解决此问题的方法?
我想你只是想要条件聚合:
select region,
sum(case when type = 'Sales' then - Amount
when type = 'Sales&Service' then Amount
end) as service_only
from t
group by region;
如果你想要总计,那取决于你的数据库。许多支持 rollup
或 grouping sets
允许将其作为聚合的一部分。
--drop table product;
create table product(region varchar2(10),type varchar2(30),amount number(5,2));
insert into product values('A','Sales',100);
insert into product values('B','Sales',150);
insert into product values('C','Sales',170);
insert into product values('D','Sales',180);
insert into product values('A',(select 'Sales'||'&'||'service' from dual),120);
insert into product values('B',(select 'Sales'||'&'||'service' from dual),195);
insert into product values('C',(select 'Sales'||'&'||'service' from dual),178.5);
insert into product values('D',(select 'Sales'||'&'||'service' from dual),183.6);
select sum(decode(type,'Sales',amount,0)) sales,
sum(decode(type,(select 'Sales'||'&'||'service' from dual),amount,0)) sales_servie_only,
sum(decode(type,(select 'Sales'||'&'||'service' from dual),amount,0))-sum(decode(type,'Sales',amount,0))as total
from product
group by ROLLUP(region);
--我们可以通过使用 case and decode and sum and group by clause
注:第一个table是当前数据集,第二个table是请求的结果。
我正在考虑创建临时的 table X 和 Y,它们分别具有销售和销售与服务价值数据,并使用连接计算方差。我想知道这是否是 right/convenient 解决此问题的方法?
我想你只是想要条件聚合:
select region,
sum(case when type = 'Sales' then - Amount
when type = 'Sales&Service' then Amount
end) as service_only
from t
group by region;
如果你想要总计,那取决于你的数据库。许多支持 rollup
或 grouping sets
允许将其作为聚合的一部分。
--drop table product;
create table product(region varchar2(10),type varchar2(30),amount number(5,2));
insert into product values('A','Sales',100);
insert into product values('B','Sales',150);
insert into product values('C','Sales',170);
insert into product values('D','Sales',180);
insert into product values('A',(select 'Sales'||'&'||'service' from dual),120);
insert into product values('B',(select 'Sales'||'&'||'service' from dual),195);
insert into product values('C',(select 'Sales'||'&'||'service' from dual),178.5);
insert into product values('D',(select 'Sales'||'&'||'service' from dual),183.6);
select sum(decode(type,'Sales',amount,0)) sales,
sum(decode(type,(select 'Sales'||'&'||'service' from dual),amount,0)) sales_servie_only,
sum(decode(type,(select 'Sales'||'&'||'service' from dual),amount,0))-sum(decode(type,'Sales',amount,0))as total
from product
group by ROLLUP(region);
--我们可以通过使用 case and decode and sum and group by clause