w3resource

SQL Challenges-1: Find cost percent for each order of total order amount

SQL Challenges-1: Exercise-69 with Solution

From the following tables write a query in SQL to find the cost percent for each order of total order amount of a customer. Return customer ID, customer name, order details, order amount and cost percent.

Table: orders

Structure:

FieldTypeNullKeyDefaultExtra
ord_numintNOPRI
ord_amountintYES
advance_amountintYES
ord_datedateYES
cust_codevarchar(10)YESMUL
ord_descriptionvarchar(25)YES

Data:

ord_numord_amountadvance_amountord_datecust_codeord_description
20010010006002008-01-08C00015 RAM
200102 2000 300 2008-05-25 C00012 mother board
200105 2500 500 2008-07-18 C00025 RAM
200107 4500 900 2008-08-30 C00007 hard disk
200108 4000 600 2008-02-15 C00008 mouse
200109 3500 800 2008-07-30 C00015 key board
200113 4000 600 2008-06-10 C00022 key board
200116 500 100 2008-07-13 C00010 mouse
200118 500 100 2008-07-20 C00022 mouse
200119 4000 700 2008-09-16 C00007 RAM
200121 1500 600 2008-09-23 C00008 key board
200122 2500 400 2008-09-16 C00007 mother board
200123 500 100 2008-09-16 C00022 mother board
200125 2000 600 2008-10-10 C00008 hard disk
200126 500 100 2008-06-24 C00022 hard disk
200127 2500 400 2008-07-20 C00015 mouse
200128 3500 1500 2008-07-20 C00009 mother board
200129 2500 500 2008-07-20 C00022 RAM
200130 2500 400 2008-07-30 C00025 mother board
200131 900 150 2008-08-26 C00012 hard disk
200133 1200 400 2008-06-29 C00009 mouse

Table: customer

Structure:

FieldTypeNullKeyDefaultExtra
cust_codevarchar(10)NOPRI
cust_namevarchar(25)YES
cust_cityvarchar(25)YES
working_areavarchar(25)YES
cust_countryvarchar(25)YES
grade intYES
opening_amtdecimal(10,2)YES
receive_amtdecimal(10,2)YES
payment_amtdecimal(10,2)YES
outstanding_amt decimal(10,2)YES
phone_no varchar(15)YES

Data:

cust_codecust_namecust_cityworking_areacust_countrygradeopening_amtreceive_amtpayment_amtoutstanding_amtphone_no
C00001MichealNew YorkNew YorkUSA23000.005000.002000.00 6000.00 CCCCCCC
C00002BoltNew YorkNew YorkUSA35000.007000.009000.00 3000.00 DDNRDRH
C00003MartinTorentoTorentoCanada28000.007000.007000.00 8000.00 MJYURFD
C00004WinstonBrisbanBrisbanAustralia15000.008000.007000.00 6000.00 AAAAAAA
C00005SasikantMumbaiMumbaiIndia17000.0011000.007000.00 11000.00 147-25896312
C00006ShiltonTorentoTorentoCanada110000.007000.006000.00 11000.00 DDDDDDD
C00007RamanathanChennaiChennaiIndia17000.0011000.009000.00 9000.00 GHRDWSD
C00008KarolinaTorentoTorentoCanada17000.007000.009000.00 5000.00 HJKORED
C00009RameshMumbaiMumbaiIndia38000.007000.003000.00 12000.00 Phone No
C00010CharlesHampshairHampshairUK36000.004000.005000.00 5000.00 MMMMMMM
C00011SundariyaChennaiChennaiIndia37000.0011000.007000.00 11000.00 PPHGRTS
C00012StevenSan JoseSan JoseUSA15000.007000.009000.00 3000.00 KRFYGJK
C00013HolmesLondonLondonUK26000.005000.007000.00 4000.00 BBBBBBB
C00014RangarappaBangaloreBangaloreIndia28000.0011000.007000.00 12000.00 AAAATGF
C00015StuartLondonLondonUK16000.008000.003000.00 11000.00 GFSGERS
C00016VenkatpatiBangaloreBangaloreIndia28000.0011000.007000.00 12000.00 JRTVFDD
C00017SrinivasBangaloreBangaloreIndia28000.004000.003000.00 9000.00 AAAAAAB
C00018FlemingBrisbanBrisbanAustralia27000.007000.009000.00 5000.00 NHBGVFC
C00019YearannaiduChennaiChennaiIndia18000.007000.007000.00 8000.00 ZZZZBFV
C00020AlbertNew YorkNew YorkUSA35000.007000.006000.00 6000.00 BBBBSBB
C00021JacksBrisbanBrisbanAustralia17000.007000.007000.00 7000.00 WERTGDF
C00022AvinashMumbaiMumbaiIndia27000.0011000.009000.00 9000.00 113-12345678
C00023KarlLondonLondonUK04000.006000.007000.00 3000.00 AAAABAA
C00024CookLondonLondonUK24000.009000.007000.00 6000.00 FSDDSDF
C00025RavindranBangaloreBangaloreIndia25000.007000.004000.00 8000.00 AVAVAVA

Sample Solution:

SQL Code(MySQL):

create table customer(
cust_code		varchar(10) not null unique,	
cust_name		varchar(25),
cust_city		varchar(25),
working_area	varchar(25),
cust_country	varchar(25),
grade			integer,
opening_amt		decimal(10,2),
receive_amt		decimal(10,2),
payment_amt		decimal(10,2),
outstanding_amt  decimal(10,2),
phone_no 		varchar(15)
);



insert into customer values('C00013','Holmes     ','London    ','London   ','UK       ', 2, 6000.00, 5000.00,7000.00, 4000.00,'BBBBBBB     ');
insert into customer values('C00001','Micheal    ','New York  ','New York ','USA      ', 2, 3000.00, 5000.00,2000.00, 6000.00,'CCCCCCC     ');
insert into customer values('C00020','Albert     ','New York  ','New York ','USA      ', 3, 5000.00, 7000.00,6000.00, 6000.00,'BBBBSBB     ');
insert into customer values('C00025','Ravindran  ','Bangalore ','Bangalore','India    ', 2, 5000.00, 7000.00,4000.00, 8000.00,'AVAVAVA     ');
insert into customer values('C00024','Cook       ','London    ','London   ','UK       ', 2, 4000.00, 9000.00,7000.00, 6000.00,'FSDDSDF     ');
insert into customer values('C00015','Stuart     ','London    ','London   ','UK       ', 1, 6000.00, 8000.00,3000.00,11000.00,'GFSGERS     ');
insert into customer values('C00002','Bolt       ','New York  ','New York ','USA      ', 3, 5000.00, 7000.00,9000.00, 3000.00,'DDNRDRH     ');
insert into customer values('C00018','Fleming    ','Brisban   ','Brisban  ','Australia', 2, 7000.00, 7000.00,9000.00, 5000.00,'NHBGVFC     ');
insert into customer values('C00021','Jacks      ','Brisban   ','Brisban  ','Australia', 1, 7000.00, 7000.00,7000.00, 7000.00,'WERTGDF     ');
insert into customer values('C00019','Yearannaidu','Chennai   ','Chennai  ','India    ', 1, 8000.00, 7000.00,7000.00, 8000.00,'ZZZZBFV     ');
insert into customer values('C00005','Sasikant   ','Mumbai    ','Mumbai   ','India    ', 1, 7000.00,11000.00,7000.00,11000.00,'147-25896312');
insert into customer values('C00007','Ramanathan ','Chennai   ','Chennai  ','India    ', 1, 7000.00,11000.00,9000.00, 9000.00,'GHRDWSD     ');
insert into customer values('C00022','Avinash    ','Mumbai    ','Mumbai   ','India    ', 2, 7000.00,11000.00,9000.00, 9000.00,'113-12345678');
insert into customer values('C00004','Winston    ','Brisban   ','Brisban  ','Australia', 1, 5000.00, 8000.00,7000.00, 6000.00,'AAAAAAA     ');
insert into customer values('C00023','Karl       ','London    ','London   ','UK       ', 0, 4000.00, 6000.00,7000.00, 3000.00,'AAAABAA     ');
insert into customer values('C00006','Shilton    ','Torento   ','Torento  ','Canada   ', 1,10000.00, 7000.00,6000.00,11000.00,'DDDDDDD     ');
insert into customer values('C00010','Charles    ','Hampshair ','Hampshair','UK       ', 3, 6000.00, 4000.00,5000.00, 5000.00,'MMMMMMM     ');
insert into customer values('C00017','Srinivas   ','Bangalore ','Bangalore','India    ', 2, 8000.00, 4000.00,3000.00, 9000.00,'AAAAAAB     ');
insert into customer values('C00012','Steven     ','San Jose  ','San Jose ','USA      ', 1, 5000.00, 7000.00,9000.00, 3000.00,'KRFYGJK     ');
insert into customer values('C00008','Karolina   ','Torento   ','Torento  ','Canada   ', 1, 7000.00, 7000.00,9000.00, 5000.00,'HJKORED     ');
insert into customer values('C00003','Martin     ','Torento   ','Torento  ','Canada   ', 2, 8000.00, 7000.00,7000.00, 8000.00,'MJYURFD     ');
insert into customer values('C00009','Ramesh     ','Mumbai    ','Mumbai   ','India    ', 3, 8000.00, 7000.00,3000.00,12000.00,'Phone No    ');
insert into customer values('C00014','Rangarappa ','Bangalore ','Bangalore','India    ', 2, 8000.00,11000.00,7000.00,12000.00,'AAAATGF     ');
insert into customer values('C00016','Venkatpati ','Bangalore ','Bangalore','India    ', 2, 8000.00,11000.00,7000.00,12000.00,'JRTVFDD     ');
insert into customer values('C00011','Sundariya  ','Chennai   ','Chennai  ','India    ', 3, 7000.00,11000.00,7000.00,11000.00,'PPHGRTS     ');

	

create table orders(
ord_num		integer(10) not null unique,	
ord_amount		integer,
advance_amount		integer,
ord_date	date,
cust_code	varchar(10),
ord_description		varchar(25),
foreign key(cust_code) references customer(cust_code)
);


 insert into orders values(200122, 2500, 400,'2008-09-16','C00007','mother board');
 insert into orders values(200118,  500, 100,'2008-07-20','C00022','mouse');
 insert into orders values(200119, 4000, 700,'2008-09-16','C00007','RAM');
 insert into orders values(200121, 1500, 600,'2008-09-23','C00008','key board');
 insert into orders values(200130, 2500, 400,'2008-07-30','C00025','mother board');
 insert into orders values(200108, 4000, 600,'2008-02-15','C00008','mouse');
 insert into orders values(200105, 2500, 500,'2008-07-18','C00025','RAM');
 insert into orders values(200109, 3500, 800,'2008-07-30','C00015','key board');
 insert into orders values(200125, 2000, 600,'2008-10-10','C00008','hard disk');
 insert into orders values(200123,  500, 100,'2008-09-16','C00022','mother board');
 insert into orders values(200116,  500, 100,'2008-07-13','C00010','mouse');
 insert into orders values(200126,  500, 100,'2008-06-24','C00022','hard disk');
 insert into orders values(200129, 2500, 500,'2008-07-20','C00022','RAM');
 insert into orders values(200127, 2500, 400,'2008-07-20','C00015','mouse');
 insert into orders values(200128, 3500,1500,'2008-07-20','C00009','mother board');
 insert into orders values(200131,  900, 150,'2008-08-26','C00012','hard disk');
 insert into orders values(200133, 1200, 400,'2008-06-29','C00009','mouse');
 insert into orders values(200100, 1000, 600,'2008-01-08','C00015','RAM');
 insert into orders values(200107, 4500, 900,'2008-08-30','C00007','hard disk');
 insert into orders values(200113, 4000, 600,'2008-06-10','C00022','key board');
 insert into orders values(200102, 2000, 300,'2008-05-25','C00012','mother board');




select
    c.cust_code,
    c.cust_name,
    o.ord_description,
    o.ord_amount,
    o.ord_amount / sum(o.ord_amount) 
	OVER (PARTITION BY c.cust_name) AS "Percentage of Cost"
FROM
    orders o
JOIN
    customer c
ON o.cust_code = c.cust_code

Sample Output:

cust_code|cust_name  |ord_description|ord_amount|Percentage of Cost|
---------+-----------+---------------+----------+------------------+
C00022   |Avinash    |key board      |      4000|            0.5000|
C00022   |Avinash    |mouse          |       500|            0.0625|
C00022   |Avinash    |mother board   |       500|            0.0625|
C00022   |Avinash    |hard disk      |       500|            0.0625|
C00022   |Avinash    |RAM            |      2500|            0.3125|
C00010   |Charles    |mouse          |       500|            1.0000|
C00008   |Karolina   |mouse          |      4000|            0.5333|
C00008   |Karolina   |key board      |      1500|            0.2000|
C00008   |Karolina   |hard disk      |      2000|            0.2667|
C00007   |Ramanathan |hard disk      |      4500|            0.4091|
C00007   |Ramanathan |RAM            |      4000|            0.3636|
C00007   |Ramanathan |mother board   |      2500|            0.2273|
C00009   |Ramesh     |mother board   |      3500|            0.7447|
C00009   |Ramesh     |mouse          |      1200|            0.2553|
C00025   |Ravindran  |RAM            |      2500|            0.5000|
C00025   |Ravindran  |mother board   |      2500|            0.5000|
C00012   |Steven     |mother board   |      2000|            0.6897|
C00012   |Steven     |hard disk      |       900|            0.3103|
C00015   |Stuart     |RAM            |      1000|            0.1429|
C00015   |Stuart     |key board      |      3500|            0.5000|
C00015   |Stuart     |mouse          |      2500|            0.3571|

SQL Code Editor:


Contribute your code and comments through Disqus.

Previous: Employees who are earning more salary than their managers.
Next: Resolve highest complaint and nearest manager id is 114.



Become a Patron!

Follow us on Facebook and Twitter for latest update.

It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.

https://w3resource.com/sql-exercises/challenges-1/sql-challenges-1-exercise-69.php