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
Random Solutions  
 
programming4us programming4us