star schema

13
Analytical Functions Practical Data model: create table time (time_key number(4) primary key , day number(2), day_of_week number(2), month char(3), quarter varchar2(2), year number(4)); create table item(item_key varchar2(4) primary key, item_name varchar2(15), brand varchar2(15), type varchar2(15), supplier_type varchar2(15)); create table branch(branch_key varchar2(4) primary key, branch_name varchar2(15), branch_type varchar2(10)); create table location(location_key number(4) primary key, street varchar2(15), city varchar2(15), province_or_state varchar2(15), country varchar2(15)); create table sales(time_key number(4) references time(time_key) , item_key varchar2(4) references item(item_key), branch_key varchar2(4) references branch(branch_key), location_key number(4) references location(location_key), dollars_sold number(6), units_sold number(4) ); insert into time values(1,1,1,'MAR','Q1',2014); insert into time values(2,2,1,'FEB','Q1',2014); insert into time values(3,3,1,'MAR','Q1',2014); insert into time values(4,4,1,'APR','Q2',2014); insert into time values(5,1,1,'MAY','Q2',2014); insert into time values(6,4,1,'NOV','Q4',2014); insert into time values(7,1,1,'JUL','Q3',2014); insert into time values(8,2,2,'APR','Q2',2013); insert into time values(9,6,3,'MAY','Q2',2013); Analytical functions practical Page 1 of 2

Upload: harshali-y-patil

Post on 21-Dec-2015

219 views

Category:

Documents


1 download

DESCRIPTION

Model

TRANSCRIPT

Page 1: Star Schema

Analytical Functions Practical

Data model:

create table time (time_key number(4) primary key , day number(2), day_of_week number(2), month char(3),quarter varchar2(2), year number(4));

create table item(item_key varchar2(4) primary key, item_name varchar2(15), brand varchar2(15), type varchar2(15),supplier_type varchar2(15));

create table branch(branch_key varchar2(4) primary key, branch_name varchar2(15), branch_type varchar2(10));

create table location(location_key number(4) primary key, street varchar2(15), city varchar2(15), province_or_state varchar2(15), country varchar2(15));

create table sales(time_key number(4) references time(time_key) ,item_key varchar2(4) references item(item_key),branch_key varchar2(4) references branch(branch_key),location_key number(4) references location(location_key), dollars_sold number(6), units_sold number(4) );

insert into time values(1,1,1,'MAR','Q1',2014);insert into time values(2,2,1,'FEB','Q1',2014);insert into time values(3,3,1,'MAR','Q1',2014);insert into time values(4,4,1,'APR','Q2',2014);insert into time values(5,1,1,'MAY','Q2',2014);insert into time values(6,4,1,'NOV','Q4',2014);insert into time values(7,1,1,'JUL','Q3',2014);insert into time values(8,2,2,'APR','Q2',2013);insert into time values(9,6,3,'MAY','Q2',2013);insert into time values(10,1,2,'NOV','Q4',2013);insert into time values(11,15,3,'JUL','Q3',2013);

SELECT * FROM TIME;

INSERT INTO ITEM VALUES('I001','SOAP','GODREJ','C','REGULAR');

Analytical functions practical

Page 2: Star Schema

INSERT INTO ITEM VALUES('I002','BABY OIL','GODREJ','C','REGULAR'); INSERT INTO ITEM VALUES('I003','LIQUID SOAP','PnG','S','ADHOC'); INSERT INTO ITEM VALUES('I004','SHAMPOO','HL','C','REGULAR'); INSERT INTO ITEM VALUES('I005','BABY OIL','PnG','S','ADHOC'); INSERT INTO ITEM VALUES('I006','PERFUME','HL','C','REGULAR'); INSERT INTO ITEM VALUES('I007','SOAP','PnG','S','REGULAR');

SELECT * FROM ITEM;

insert into branch values('B001','SOUTH MUMBAI','MAIN');insert into branch values('B002','NORTH MUMBAI','NRI');insert into branch values('B003','CENTRAL MUMBAI','MAIN');insert into branch values('B004','CITY','MAIN');insert into branch values('B005','CENTRAL MUMBAI','NRI');

SELECT * FROM BRANCH;

INSERT INTO LOCATION VALUES(1001,'MG ROAD','MUMBAI','MH','INDIA');INSERT INTO LOCATION VALUES(1002,'JM ROAD','PUNE','MH','INDIA');INSERT INTO LOCATION VALUES(1003,'DF ROAD','NASIK','MH','INDIA');INSERT INTO LOCATION VALUES(1004,'KARVE ROAD','PUNE','MH','INDIA');INSERT INTO LOCATION VALUES(1005,'MJ STREET','NEW YORK','NY','USA');

SELECT * FROM LOCATION;

INSERT INTO SALES VALUES(1,'I001','B001',1001,100000,300);INSERT INTO SALES VALUES(1,'I002','B004',1003,25000,500);INSERT INTO SALES VALUES(2,'I001','B001',1004,150000,600);INSERT INTO SALES VALUES(2,'I002','B003',1001,122000,250);INSERT INTO SALES VALUES(3,'I001','B004',1005,150000,450);INSERT INTO SALES VALUES(3,'I003','B001',1001,99000,1000);INSERT INTO SALES VALUES(3,'I001','B001',1003,65000,200);INSERT INTO SALES VALUES(3,'I001','B004',1001,10000,700);INSERT INTO SALES VALUES(1,'I003','B003',1002,24000,550);INSERT INTO SALES VALUES(2,'I001','B001',1001,100000,300);INSERT INTO SALES VALUES(2,'I001','B002',1002,55000,200);INSERT INTO SALES VALUES(1,'I004','B003',1005,46000,150);INSERT INTO SALES VALUES(5,'I004','B005',1001,80000,900);INSERT INTO SALES VALUES(6,'I003','B002',1002,55500,250);INSERT INTO SALES VALUES(6,'I001','B001',1005,90000,100);INSERT INTO SALES VALUES(8,'I003','B002',1002,75000,150);INSERT INTO SALES VALUES(4,'I001','B002',1002,80000,100);INSERT INTO SALES VALUES(7,'I003','B002',1003,55500,120);INSERT INTO SALES VALUES(7,'I002','B001',1005,90000,160);INSERT INTO SALES VALUES(8,'I003','B002',1002,75000,650);

SELECT * FROM SALES;

Q1. Display those rows where row-number is less than 10 SELECT * FROM SALES WHERE ROWNUM < 10;

TIME_KEY ITEM_KEY BRANCH_KEY LOCATION_KEY DOLLARS_SOLD UNITS_SOLD ---------------------- -------- ---------- ---------------------- ---------------------- ---------------------- 1 I001 B001 1001 100000 300 1 I002 B004 1003 25000 500 2 I001 B001 1004 150000 600 2 I002 B003 1001 122000 250 3 I001 B004 1005 150000 450 3 I003 B001 1001 99000 1000

Analytical functions practical

Page 3: Star Schema

3 I001 B001 1003 65000 200 3 I001 B004 1001 10000 700 1 I003 B003 1002 24000 550

9 rows selected

Q2. Display day wise item-wise total units sold select s.time_key,s.item_key, sum(s.units_sold) from sales s , time t, item iwhere s.time_key= t.time_key and s.item_key = i.item_keygroup by s.time_key,s.item_key;

TIME_KEY ITEM_KEY SUM(S.UNITS_SOLD) ---------------------- -------- ---------------------- 2 I002 250 5 I004 900 8 I003 800 7 I003 120 1 I001 300 4 I001 100 6 I003 250 6 I001 100 3 I001 1350 1 I003 550 1 I002 500 2 I001 1100 3 I003 1000 1 I004 150 7 I002 160

15 rows selected

Q3 Display day wise item-wise total units sold in ascending order or timeid/keyselect s.time_key,s.item_key, sum(s.units_sold) from sales s , time t, item iwhere s.time_key= t.time_key and s.item_key = i.item_keygroup by s.time_key,s.item_key order by s.time_key;

TIME_KEY ITEM_KEY SUM(S.UNITS_SOLD) ---------------------- -------- ---------------------- 1 I001 300 1 I002 500 1 I003 550 1 I004 150 2 I001 1100 2 I002 250 3 I001 1350 3 I003 1000 4 I001 100 5 I004 900 6 I001 100 6 I003 250 7 I002 160 7 I003 120 8 I003 800

15 rows selected

Q4 Display item-wise sales detailsselect s.item_key, sum(s.units_sold) from sales s , item iwhere s.item_key = i.item_keygroup by s.item_key;

ITEM_KEY SUM(S.DOLLARS_SOLD) SUM(S.UNITS_SOLD) -------- ---------------------- ---------------------- I002 237000 910 I001 800000 2950 I004 126000 1050 I003 384000 2720

Analytical functions practical

Page 4: Star Schema

Q5. Display quarter wise units sold in ascending order of quarter numberselect t.quarter, sum(s.units_sold) from sales s , time twhere s.time_key = t.time_keygroup by t.quarter order by t.quarter;

QUARTER SUM(S.UNITS_SOLD) ------- ---------------------- Q1 5200 Q2 1800 Q3 280 Q4 350

4 rows selected

Q6. Display citywise and item’s brand wise total units sold select l.city, i.brand, sum(s.units_sold) from sales s , item i, location lwhere s.location_key= l.location_key and s.item_key = i.item_keygroup by l.city,i.brand order by l.city;

CITY BRAND SUM(S.UNITS_SOLD) --------------- --------------- ---------------------- MUMBAI GODREJ 1550 MUMBAI HL 900 MUMBAI PnG 1000 NASIK GODREJ 700 NASIK PnG 120 NEW YORK GODREJ 710 NEW YORK HL 150 PUNE GODREJ 900 PUNE PnG 1600

9 rows selected

Q7. Display every branchwise average units sold.select distinct b.branch_name , avg(s.units_sold) over() avg_units_soldfrom branch b natural join sales s;

BRANCH_NAME AVG_UNITS_SOLD --------------- ---------------------- NORTH MUMBAI 381.5 SOUTH MUMBAI 381.5 CITY 381.5 CENTRAL MUMBAI 381.5

4 rows selected

Q8. Display branchwise average units sold (analytical function).Select distinct b.branch_name , avg(s.units_sold) over(partition by b.branch_name) avg_units_sold from branch b natural join sales s;

BRANCH_NAME AVG_UNITS_SOLD --------------- ---------------------- CITY 550 SOUTH MUMBAI 380 CENTRAL MUMBAI 462.5 NORTH MUMBAI 245

4 rows selected

Q9. Display orthogonal averaging on sales tableselect time_key,item_key,branch_key, location_key,round(avg(units_sold) over(partition by item_key),2) item_avg,round(avg(units_sold) over(partition by branch_key),2) branch_avg,round(avg(units_sold) over(partition by location_key),2) location_avg,avg(units_sold) over() total_avg

Analytical functions practical

Page 5: Star Schema

from sales;

TIME_KEY ITEM_KEY BRANCH_KEY LOCATION_KEY ITEM_AVG BRANCH_AVG LOCATION_AVG TOTAL_AVG ---------------------- -------- ---------- ---------------------- ---------------------- ---------------------- ---------------------- ---------------------- 6 I001 B001 1005 327.78 380 215 381.5 3 I001 B004 1005 327.78 550 215 381.5 3 I001 B004 1001 327.78 550 575 381.5 4 I001 B002 1002 327.78 245 316.67 381.5 2 I001 B002 1002 327.78 245 316.67 381.5 2 I001 B001 1001 327.78 380 575 381.5 1 I001 B001 1001 327.78 380 575 381.5 3 I001 B001 1003 327.78 380 273.33 381.5 2 I001 B001 1004 327.78 380 600 381.5 7 I002 B001 1005 303.33 380 215 381.5 1 I002 B004 1003 303.33 550 273.33 381.5 2 I002 B003 1001 303.33 316.67 575 381.5 7 I003 B002 1003 453.33 245 273.33 381.5 8 I003 B002 1002 453.33 245 316.67 381.5 3 I003 B001 1001 453.33 380 575 381.5 6 I003 B002 1002 453.33 245 316.67 381.5 8 I003 B002 1002 453.33 245 316.67 381.5 1 I003 B003 1002 453.33 316.67 316.67 381.5 5 I004 B005 1001 525 900 575 381.5 1 I004 B003 1005 525 316.67 215 381.5

20 rows selected

Q10. Display the difference between each units_sold and branch avgSelect distinct b.branch_name , s.units_sold,avg(s.units_sold) over(partition by b.branch_name) avg_units_sold , s.units_sold - avg(s.units_sold) over(partition by b.branch_name) diff_avgfrom branch b natural join sales s;

BRANCH_NAME UNITS_SOLD AVG_UNITS_SOLD DIFF_AVG --------------- ---------------------- ---------------------- ---------------------- NORTH MUMBAI 150 245 -95 NORTH MUMBAI 250 245 5 SOUTH MUMBAI 160 380 -220 SOUTH MUMBAI 300 380 -80 CENTRAL MUMBAI 900 462.5 437.5 NORTH MUMBAI 100 245 -145 NORTH MUMBAI 120 245 -125 CENTRAL MUMBAI 150 462.5 -312.5 SOUTH MUMBAI 100 380 -280 NORTH MUMBAI 200 245 -45 SOUTH MUMBAI 200 380 -180 SOUTH MUMBAI 1000 380 620 SOUTH MUMBAI 600 380 220 CENTRAL MUMBAI 550 462.5 87.5 CITY 500 550 -50 CITY 700 550 150 CENTRAL MUMBAI 250 462.5 -212.5 NORTH MUMBAI 650 245 405 CITY 450 550 -100

19 rows selected

Q11. Display sales info along with number of items in branch and number of items at locationSelect time_key,item_key, branch_key, location_key , dollars_sold, units_sold, count(distinct item_key) over(partition by branch_key) branch_items,count(distinct item_key) over(partition by location_key) location_itemsfrom sales;

TIME_KEY ITEM_KEY BRANCH_KEY LOCATION_KEY DOLLARS_SOLD UNITS_SOLD BRANCH_ITEMS LOCATION_ITEMS ---------------------- -------- ---------- ---------------------- ---------------------- ---------------------- ---------------------- ---------------------- 1 I001 B001 1001 100000 300 3 4 2 I001 B001 1001 100000 300 3 4 6 I001 B001 1005 90000 100 3 3 2 I001 B001 1004 150000 600 3 1 3 I001 B001 1003 65000 200 3 3 7 I002 B001 1005 90000 160 3 3 3 I003 B001 1001 99000 1000 3 4 2 I001 B002 1002 55000 200 2 2 4 I001 B002 1002 80000 100 2 2

Analytical functions practical

Page 6: Star Schema

6 I003 B002 1002 55500 250 2 2 8 I003 B002 1002 75000 650 2 2 8 I003 B002 1002 75000 150 2 2 7 I003 B002 1003 55500 120 2 3 2 I002 B003 1001 122000 250 3 4 1 I003 B003 1002 24000 550 3 2 1 I004 B003 1005 46000 150 3 3 3 I001 B004 1001 10000 700 2 4 3 I001 B004 1005 150000 450 2 3 1 I002 B004 1003 25000 500 2 3 5 I004 B005 1001 80000 900 1 4

20 rows selected

Q12. Display sales details with Location wise ranking Select time_key,item_key, branch_key, location_key , dollars_sold, units_sold, rank() over(partition by location_key order by dollars_sold desc) location_rankfrom sales;

TIME_KEY ITEM_KEY BRANCH_KEY LOCATION_KEY DOLLARS_SOLD UNITS_SOLD LOCATION_RANK ---------------------- -------- ---------- ---------------------- ---------------------- ---------------------- ---------------------- 2 I002 B003 1001 122000 250 1 1 I001 B001 1001 100000 300 2 2 I001 B001 1001 100000 300 2 3 I003 B001 1001 99000 1000 4 5 I004 B005 1001 80000 900 5 3 I001 B004 1001 10000 700 6 4 I001 B002 1002 80000 100 1 8 I003 B002 1002 75000 150 2 8 I003 B002 1002 75000 650 2 6 I003 B002 1002 55500 250 4 2 I001 B002 1002 55000 200 5 1 I003 B003 1002 24000 550 6 3 I001 B001 1003 65000 200 1 7 I003 B002 1003 55500 120 2 1 I002 B004 1003 25000 500 3 2 I001 B001 1004 150000 600 1 3 I001 B004 1005 150000 450 1 7 I002 B001 1005 90000 160 2 6 I001 B001 1005 90000 100 2 1 I004 B003 1005 46000 150 4

20 rows selected

Q13. Display sales details with Location wise ranking-dense rankSelect time_key,item_key, branch_key, location_key , dollars_sold, units_sold, dense_rank() over(partition by location_key order by dollars_sold desc) location_rankfrom sales;

TIME_KEY ITEM_KEY BRANCH_KEY LOCATION_KEY DOLLARS_SOLD UNITS_SOLD LOCATION_RANK ---------------------- -------- ---------- ---------------------- ---------------------- ---------------------- ---------------------- 2 I002 B003 1001 122000 250 1 1 I001 B001 1001 100000 300 2 2 I001 B001 1001 100000 300 2 3 I003 B001 1001 99000 1000 3 5 I004 B005 1001 80000 900 4 3 I001 B004 1001 10000 700 5 4 I001 B002 1002 80000 100 1 8 I003 B002 1002 75000 150 2 8 I003 B002 1002 75000 650 2 6 I003 B002 1002 55500 250 3 2 I001 B002 1002 55000 200 4 1 I003 B003 1002 24000 550 5 3 I001 B001 1003 65000 200 1 7 I003 B002 1003 55500 120 2 1 I002 B004 1003 25000 500 3 2 I001 B001 1004 150000 600 1 3 I001 B004 1005 150000 450 1 7 I002 B001 1005 90000 160 2 6 I001 B001 1005 90000 100 2 1 I004 B003 1005 46000 150 3

20 rows selected

Analytical functions practical

Page 7: Star Schema

Q14. Display first value in locationSelect time_key,location_key , dollars_sold, units_sold, first_value(units_sold) over(partition by location_key order by dollars_sold range between current row and unbounded following)location_firstvalue,first_value(units_sold) over(partition by location_key order by dollars_sold rows between current row and 2 following) location_firstvalfrom sales order by location_key;

TIME_KEY LOCATION_KEY DOLLARS_SOLD UNITS_SOLD LOCATION_FIRSTVALUE LOCATION_FIRSTVAL ---------------------- ---------------------- ---------------------- ---------------------- ---------------------- ---------------------- 3 1001 10000 700 700 700 5 1001 80000 900 900 900 3 1001 99000 1000 1000 1000 1 1001 100000 300 300 300 2 1001 100000 300 300 300 2 1001 122000 250 250 250 1 1002 24000 550 550 550 2 1002 55000 200 200 200 6 1002 55500 250 250 250 8 1002 75000 150 150 150 8 1002 75000 650 150 650 4 1002 80000 100 100 100 1 1003 25000 500 500 500 7 1003 55500 120 120 120 3 1003 65000 200 200 200 2 1004 150000 600 600 600 1 1005 46000 150 150 150 6 1005 90000 100 100 100 7 1005 90000 160 100 160 3 1005 150000 450 450 450

20 rows selected

Display last value in locationSelect time_key,location_key , dollars_sold, units_sold, last_value(units_sold) over(partition by location_key order by dollars_sold range between current row and unbounded following)location_lastvalue,last_value(units_sold) over(partition by location_key order by dollars_sold rows between current row and 2 following) location_lastvalfrom sales order by location_key;

TIME_KEY LOCATION_KEY DOLLARS_SOLD UNITS_SOLD LOCATION_LASTVALUE LOCATION_LASTVAL ---------------------- ---------------------- ---------------------- ---------------------- ---------------------- ---------------------- 3 1001 10000 700 250 1000 5 1001 80000 900 250 300 3 1001 99000 1000 250 300 1 1001 100000 300 250 250 2 1001 100000 300 250 250 2 1001 122000 250 250 250 1 1002 24000 550 100 250 2 1002 55000 200 100 150 6 1002 55500 250 100 650 8 1002 75000 150 100 100 8 1002 75000 650 100 100 4 1002 80000 100 100 100 1 1003 25000 500 200 200 7 1003 55500 120 200 200 3 1003 65000 200 200 200 2 1004 150000 600 600 600 1 1005 46000 150 450 160 6 1005 90000 100 450 450 7 1005 90000 160 450 450 3 1005 150000 450 450 450

20 rows selected

Q.15 Calculate the number of units between 100 less and 200 more than each items units sold.Select item_key, dollars_sold, units_sold, count(units_sold) over( order by units_sold range between 100 preceding and 200 following) num_of_units from sales;

Analytical functions practical

Page 8: Star Schema

ITEM_KEY DOLLARS_SOLD UNITS_SOLD NUM_OF_UNITS -------- ---------------------- ---------------------- ---------------------- I001 80000 100 12 I001 90000 100 12 I003 55500 120 12 I004 46000 150 12 I003 75000 150 12 I002 90000 160 12 I001 65000 200 12 I001 55000 200 12 I002 122000 250 10 I003 55500 250 10 I001 100000 300 8 I001 100000 300 8 I001 150000 450 5 I002 25000 500 6 I003 24000 550 6 I001 150000 600 5 I003 75000 650 4 I001 10000 700 4 I004 80000 900 2 I003 99000 1000 2

20 rows selected

Q16. Display the total number of items having more dollars_sold than current itemSelect item_key, dollars_sold, count(dollars_sold) over( order by dollars_sold range between 1 following and unbounded following) num_of_dollars_sold_morefrom sales order by dollars_sold;

ITEM_KEY DOLLARS_SOLD NUM_OF_DOLLARS_SOLD_MORE -------- ---------------------- ------------------------ I001 10000 19 I003 24000 18 I002 25000 17 I004 46000 16 I001 55000 15 I003 55500 13 I003 55500 13 I001 65000 12 I003 75000 10 I003 75000 10 I001 80000 8 I004 80000 8 I002 90000 6 I001 90000 6 I003 99000 5 I001 100000 3 I001 100000 3 I002 122000 2 I001 150000 0 I001 150000 0

20 rows selected

Q17. Display average dollars_sold item wise and its calculated from following rowsSelect item_key,location_key, dollars_sold,avg(dollars_sold) over (partition by item_key order by location_key rows between 1 following and unbounded following) avg_dollars_soldfrom sales order by item_key;

ITEM_KEY LOCATION_KEY DOLLARS_SOLD AVG_DOLLARS_SOLD -------- ---------------------- ---------------------- ---------------------- I001 1001 10000 98750 I001 1001 100000 98571.4285714285714285714285714285714286 I001 1001 100000 98333.3333333333333333333333333333333333 I001 1002 80000 102000 I001 1002 55000 113750 I001 1003 65000 130000 I001 1004 150000 120000 I001 1005 90000 150000

Analytical functions practical

Page 9: Star Schema

I001 1005 150000 I002 1001 122000 57500 I002 1003 25000 90000 I002 1005 90000 I003 1001 99000 57000 I003 1002 55500 57375 I003 1002 75000 51500 I003 1002 75000 39750 I003 1002 24000 55500 I003 1003 55500 I004 1001 80000 46000 I004 1005 46000

20 rows selected

Q18. Display day wise itemwise otal units soldselect time_key,item_key,sum(units_sold)from salesgroup by rollup(time_key,item_key);

TIME_KEY ITEM_KEY SUM(UNITS_SOLD) ---------------------- -------- ---------------------- 1 I001 300 1 I002 500 1 I003 550 1 I004 150 1 1500 2 I001 1100 2 I002 250 2 1350 3 I001 1350 3 I003 1000 3 2350 4 I001 100 4 100 5 I004 900 5 900 6 I001 100 6 I003 250 6 350 7 I002 160 7 I003 120 7 280 8 I003 800 8 800 7630

24 rows selected

Analytical functions practical