|
|
Question : custom rollup
|
|
I provide the code to create table test and data and s select statement. I like the select result not to include NY for USA. So, the USA sum(population) will be 700 insstead of 1100. Everything else remain the same. Thanks.
COUNTRY STATE CITY SUM(POPULATION) ---------- ---------- ---------- --------------- USA CA LA 400 USA CA 400 USA NY NY 300 USA NY BAFFALO 100 USA NY 400 USA TX DALLAS 100 USA TX HOUSTON 200 USA TX 300 USA 700 700
create table test (country varchar2(10), state varchar2(10), city varchar2(10), population number);
SET DEFINE OFF; Insert into TEST (COUNTRY, STATE, CITY, POPULATION) Values ('USA', 'TX', 'DALLAS', 100); Insert into TEST (COUNTRY, STATE, CITY, POPULATION) Values ('USA', 'TX', 'HOUSTON', 200); Insert into TEST (COUNTRY, STATE, CITY, POPULATION) Values ('USA', 'NY', 'NY', 300); Insert into TEST (COUNTRY, STATE, CITY, POPULATION) Values ('USA', 'NY', 'BAFFALO', 100); Insert into TEST (COUNTRY, STATE, CITY, POPULATION) Values ('USA', 'CA', 'LA', 400); COMMIT;
SELECT country,state, city, sum(population) FROM test GROUP BY ROLLUP(country,state, city);
|
Answer : custom rollup
|
|
oops,
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
SELECT country, state, city, DECODE(grp, 0, all_sum, 1, no_ny_sum)
FROM ( SELECT country,
state,
city,
GROUPING(state) grp,
SUM(population) all_sum,
SUM(CASE WHEN state != 'NY' THEN population END) no_ny_sum
FROM test
GROUP BY ROLLUP(country, state, city))
|
Open in New Window
Select All
|
|
|
|
|