我有一个问题:
select country_region,
country_subregion,
country_name,
calendar_year,
calendar_quarter_number,
sum(amount_sold) as amount
from countries co join
customers cu on co.country_id = cu.country_id join
sales sa on cu.cust_id = sa.cust_id join
times ti on sa.time_id = ti.time_id
where ( co.country_region = 'Americas'
or co.country_region = 'Middle East'
)
and ti.calendar_year between 2000 and 2001
group by grouping sets
(
(country_region, country_subregion, country_name, calendar_year, calendar_quarter_number),
(country_region, country_subregion, country_name, calendar_year),
(country_region, country_subregion, country_name),
(country_region, country_subregion, calendar_year, calendar_quarter_number),
(country_region, country_subregion, calendar_year),
(country_region, country_subregion),
(country_region, calendar_year, calendar_quarter_number),
(country_region, calendar_year),
(country_region),
(calendar_year, calendar_quarter_number),
(calendar_year),
()
)
order by amount desc;
返回相同输出但使用 group by rollup 子句的查询是什么? 我想要一个查询。
答案 0 :(得分:7)
使用ROLLUP
子句的等效查询是:
select country_region
, country_subregion
, country_name
, calendar_year
, calendar_quarter_number
, sum(amount_sold) as amount
from countries co
join customers cu on co.country_id = cu.country_id
join sales sa on cu.cust_id = sa.cust_id
join times ti on sa.time_id = ti.time_id
where ( co.country_region='Americas'
or co.country_region='Middle East'
)
and ti.calendar_year between 2000 and 2001
group by rollup (country_region, country_subregion, country_name)
, rollup (calendar_year, calendar_quarter_number)
order by amount desc
以下是证据:
group by rollup (country_region, country_subregion, country_name)
, rollup (calendar_year, calendar_quarter_number)
等于
group by grouping sets
( (country_region, country_subregion, country_name)
, (country_region, country_subregion)
, (country_region)
, ()
)
, grouping sets
( (calendar_year, calendar_quarter_number)
, (calendar_year)
, ()
)
等于
group by grouping sets
( (country_region, country_subregion, country_name, calendar_year, calendar_quarter_number)
, (country_region, country_subregion, country_name, calendar_year)
, (country_region, country_subregion, country_name)
, (country_region, country_subregion, calendar_year, calendar_quarter_number)
, (country_region, country_subregion, calendar_year)
, (country_region, country_subregion)
, (country_region, calendar_year, calendar_quarter_number)
, (country_region, calendar_year)
, (country_region)
, (calendar_year, calendar_quarter_number)
, (calendar_year)
, ()
)
等于原始查询。
您可以在我去年撰写的这篇文章中找到有关该论坛的更多信息:http://www.rwijk.nl/AboutOracle/All_About_Grouping.pdf
此致 罗布。