oracle中关于分组合计函数rollup使用

常见的报表制作过程中需要对相关分组条件进行分组合计,若借助第三方工具可以很容易实现,但在oracle中提供了现成的rollup函数来帮助我们实现按条件分组合计功能。
例:若要按品牌和商品名称进行分组,同时按品牌统计,可用如下实现方式:
select pds.brand,
dbv.valuename as brandName,
pl.productname,
sum(pds.amount) as amount,
sum(pds.amount * pds.price_purchase) as cost
from purchase_statistic pds,
moobao.product_list pl,
moobao.dict_basetype_value dbv
where pds.productid = pl.productid
and pds.brand = dbv.valueid
and pds.statistic_date >=
to_date('2008-11-16 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
and pds.statistic_date <=
to_date('2008-11-16 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
group by rollup((pds.brand, dbv.valuename), pl.productname))
若需要按品牌、型号、商品名称分组,同时按品牌合计,可用如下实现时方式:
select pds.brand,
dbv.valuename as brandName,
pl.productmodel,
pl.productname,
sum(pds.amount) as amount,
sum(pds.amount * pds.price_purchase) as cost
from purchase_statistic pds,
moobao.product_list pl,
moobao.dict_basetype_value dbv
where pds.productid = pl.productid
and pds.brand = dbv.valueid
and pds.statistic_date >=
to_date('2008-11-16 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
and pds.statistic_date <=
to_date('2008-11-16 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
group by rollup((pds.brand, dbv.valuename), (pl.productmodel,pl.productname)))

两者不同之处在于rollup函数中列的组合,把需要进行合计的列括起来放到rollup的第一组中,其他的分组条件组合起来。而rollup(col1,col2,col3)这种情况是col1和col2分组后合计,col1和col3分组合计,col2和col3分组合计,会出现多个分组合计的结果,最后还有一个总的合计

你可能感兴趣的:(oracle)