oracle 中如何将查询到的i.suc

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-06
请问怎样使用oracle rollup根据特定列进行汇总?

你本身思路都有问题,如按你说的意思,你根本都不需要用使用group by rollup
你实际上是想分组时间和分组城市得到相关的平均值。你不须要用到起各城市和各时间的小计和总计:
select
city_id,
nvl(city_name,'全省') as city_name,
scan_start_time,
avg(wcsr), avg(prr), avg(cetrfk), avg(fpat)
from Region_Resource
group by scan_start_time,city_id,city_name;
这句SQL都能得到你想要的数据。

另外对rollup、grouping、having grouping_id个人理解为:
grouping 只能有一个参数,判断该行是数据库中本来的,还是由统计产生的。为0表示是数据库本来的,为1是统计的
group by rollup(a,b,c) 最后得到的结果为(a,b,c), (a,b), (a),()
可以使用having grouping_id子句过滤记录 having子句可以将不包含小计或总计的记录除去,通过grouping_id()的返回值,看其是否大于零就可以来判断实现

select ... from 表 group by rollup(.....) having grouping_id(....)<=1
总计是grouping_id=3
小计grouping_id=1
记录是grouping_id=0
grouping_id中括号里面的字段和rollup括号里面的字段一致就行

你试试
Select o.org_desc || '_' || i.b_company x,
i.trade_time,
i.cust_name,
i.order_id,
sum(i.suc_amount) over(partition by o.org_desc || '_' || i.b_company),
i.plug_id,
i.b_company,
sum(i.suc_amount) over()
from t_ec_trade_info i, t_ec_org_mapping o
where i.b_company = o.org_biz_numb
and (i.b_company is not null)
order by i.b_company desc

Select o.org_desc || '_' || i.b_company x,sum(i.suc_amount)

i.trade_time,
i.cust_name,
i.order_id,
i.suc_amount,
i.plug_id,
i.b_company
from t_ec_trade_info i, t_ec_org_mapping o
where i.b_company = o.org_biz_numb
and (i.b_company is not null)
group by rollup(o.org_desc || '_' || i.b_company)

order by i.b_company desc