最近,通过你的努力,你获得了一份工做,成为了百货公司的一位经理。
到位后,你发现你的销售数据库中有两张表,一个是商店促销时间的日历,另外一个是在促销期间的销售额列表。
你须要编写一个查询,告诉咱们在每次促销中哪位职员的销售额最高,这样能够给那个职员发绩效奖金。数据库
-- 商店促销时间的日历 create table promotions ( promo_name varchar2(50) not null primary key, -- 促销活动名称 start_date date not null, -- 开始时间 end_date date not null, -- 终止时间 check(start_date<=end_date) ); -- 促销期间的销售额表 (注意:该表只是保存促销期间的销售额) create table sales ( ticket_nbr int not null primary key, --销售票据编号 (自增) clerk_name varchar2(20) not null, --销售员姓名 sale_date date not null, --销售日期 sale_amount number(9,2) not null --销售金额 ); insert into promotions values('spring sales',to_date('2009-2-1','yyyy/mm/dd'),to_date('2009-2-15','yyyy/mm/dd')); insert into promotions values('worker sale',to_date('2009-5-1','yyyy/mm/dd'),to_date('2009-5-4','yyyy/mm/dd')); insert into promotions values('children sale',to_date('2009-6-1','yyyy/mm/dd'),to_date('2009-6-1','yyyy/mm/dd')); insert into promotions values('national day sale',to_date('2009-10-1','yyyy/mm/dd'),to_date('2009-10-7','yyyy/mm/dd')); create sequence seq_nbr; insert into sales values(seq_nbr.nextval,'david',to_date('2009-2-1','yyyy/mm/dd'),30); insert into sales values(seq_nbr.nextval,'tom',to_date('2009-2-1','yyyy/mm/dd'),73); insert into sales values(seq_nbr.nextval,'mary',to_date('2009-2-1','yyyy/mm/dd'),110); insert into sales values(seq_nbr.nextval,'tom',to_date('2009-2-2','yyyy/mm/dd'),190); insert into sales values(seq_nbr.nextval,'mary',to_date('2009-2-2','yyyy/mm/dd'),30); insert into sales values(seq_nbr.nextval,'david',to_date('2009-2-2','yyyy/mm/dd'),92); insert into sales values(seq_nbr.nextval,'mary',to_date('2009-2-3','yyyy/mm/dd'),130); insert into sales values(seq_nbr.nextval,'david',to_date('2009-2-3','yyyy/mm/dd'),90); insert into sales values(seq_nbr.nextval,'tom',to_date('2009-2-3','yyyy/mm/dd'),110); insert into sales values(seq_nbr.nextval,'mary',to_date('2009-2-4','yyyy/mm/dd'),70); insert into sales values(seq_nbr.nextval,'david',to_date('2009-2-4','yyyy/mm/dd'),9); insert into sales values(seq_nbr.nextval,'tom',to_date('2009-2-5','yyyy/mm/dd'),88); insert into sales values(seq_nbr.nextval,'mary',to_date('2009-2-5','yyyy/mm/dd'),70); insert into sales values(seq_nbr.nextval,'david',to_date('2009-2-13','yyyy/mm/dd'),50); insert into sales values(seq_nbr.nextval,'tom',to_date('2009-2-13','yyyy/mm/dd'),170); insert into sales values(seq_nbr.nextval,'mary',to_date('2009-2-14','yyyy/mm/dd'),270); insert into sales values(seq_nbr.nextval,'tom',to_date('2009-2-15','yyyy/mm/dd'),67.5); insert into sales values(seq_nbr.nextval,'david',to_date('2009-5-1','yyyy/mm/dd'),280.5); insert into sales values(seq_nbr.nextval,'mary',to_date('2009-5-1','yyyy/mm/dd'),190); insert into sales values(seq_nbr.nextval,'tom',to_date('2009-5-1','yyyy/mm/dd'),113); insert into sales values(seq_nbr.nextval,'david',to_date('2009-5-2','yyyy/mm/dd'),88); insert into sales values(seq_nbr.nextval,'mary',to_date('2009-5-2','yyyy/mm/dd'),35.5); insert into sales values(seq_nbr.nextval,'tom',to_date('2009-5-2','yyyy/mm/dd'),125); insert into sales values(seq_nbr.nextval,'david', to_date('2009-5-3','yyyy/mm/dd'),92); insert into sales values(seq_nbr.nextval,'mary',to_date('2009-5-3','yyyy/mm/dd'),93); insert into sales values(seq_nbr.nextval,'tom',to_date('2009-5-3','yyyy/mm/dd'),167); insert into sales values(seq_nbr.nextval,'david', to_date('2009-5-4','yyyy/mm/dd'),123.5); insert into sales values(seq_nbr.nextval,'mary',to_date('2009-5-4','yyyy/mm/dd'),200); insert into sales values(seq_nbr.nextval,'tom',to_date('2009-5-4','yyyy/mm/dd'),2); insert into sales values(seq_nbr.nextval,'mary',to_date('2009-6-1','yyyy/mm/dd'),190); insert into sales values(seq_nbr.nextval,'david',to_date('2009-6-1','yyyy/mm/dd'),110.5); insert into sales values(seq_nbr.nextval,'tom',to_date('2009-6-1','yyyy/mm/dd'),213); insert into sales values(seq_nbr.nextval,'tom',to_date('2009-10-1','yyyy/mm/dd'),1123); insert into sales values(seq_nbr.nextval,'david',to_date('2009-10-1','yyyy/mm/dd'),780); insert into sales values(seq_nbr.nextval,'mary',to_date('2009-10-1','yyyy/mm/dd'),310); insert into sales values(seq_nbr.nextval,'mary',to_date('2009-10-2','yyyy/mm/dd'),139); insert into sales values(seq_nbr.nextval,'david',to_date('2009-10-2','yyyy/mm/dd'),1110.5); insert into sales values(seq_nbr.nextval,'tom',to_date('2009-10-2','yyyy/mm/dd'),998); insert into sales values(seq_nbr.nextval,'mary',to_date('2009-10-3','yyyy/mm/dd'),120); insert into sales values(seq_nbr.nextval,'mary',to_date('2009-10-4','yyyy/mm/dd'),10); insert into sales values(seq_nbr.nextval,'tom',to_date('2009-10-4','yyyy/mm/dd'),234); insert into sales values(seq_nbr.nextval,'david',to_date('2009-10-5','yyyy/mm/dd'),110.5); insert into sales values(seq_nbr.nextval,'tom',to_date('2009-10-6','yyyy/mm/dd'),23); insert into sales values(seq_nbr.nextval,'david',to_date('2009-10-7','yyyy/mm/dd'),10.5); insert into sales values(seq_nbr.nextval,'王海',to_date('2009-2-1','yyyy/mm/dd'),30); insert into sales values(seq_nbr.nextval,'刘万理',to_date('2009-2-1','yyyy/mm/dd'),73); insert into sales values(seq_nbr.nextval,'高春梅',to_date('2009-2-1','yyyy/mm/dd'),110); insert into sales values(seq_nbr.nextval,'刘万理',to_date('2009-2-2','yyyy/mm/dd'),190); insert into sales values(seq_nbr.nextval,'高春梅',to_date('2009-2-2','yyyy/mm/dd'),30); insert into sales values(seq_nbr.nextval,'王海',to_date('2009-2-2','yyyy/mm/dd'),92); insert into sales values(seq_nbr.nextval,'高春梅',to_date('2009-2-3','yyyy/mm/dd'),130); insert into sales values(seq_nbr.nextval,'王海',to_date('2009-2-3','yyyy/mm/dd'),90); insert into sales values(seq_nbr.nextval,'刘万理',to_date('2009-2-3','yyyy/mm/dd'),110); insert into sales values(seq_nbr.nextval,'高春梅',to_date('2009-2-4','yyyy/mm/dd'),70); insert into sales values(seq_nbr.nextval,'王海',to_date('2009-2-4','yyyy/mm/dd'),9); insert into sales values(seq_nbr.nextval,'刘万理',to_date('2009-2-5','yyyy/mm/dd'),88); insert into sales values(seq_nbr.nextval,'高春梅',to_date('2009-2-5','yyyy/mm/dd'),70); insert into sales values(seq_nbr.nextval,'王海',to_date('2009-2-13','yyyy/mm/dd'),50); insert into sales values(seq_nbr.nextval,'刘万理',to_date('2009-2-13','yyyy/mm/dd'),170); insert into sales values(seq_nbr.nextval,'高春梅',to_date('2009-2-14','yyyy/mm/dd'),270); insert into sales values(seq_nbr.nextval,'刘万理',to_date('2009-2-15','yyyy/mm/dd'),67.5); insert into sales values(seq_nbr.nextval,'王海',to_date('2009-5-1','yyyy/mm/dd'),280.5); insert into sales values(seq_nbr.nextval,'高春梅',to_date('2009-5-1','yyyy/mm/dd'),190); insert into sales values(seq_nbr.nextval,'刘万理',to_date('2009-5-1','yyyy/mm/dd'),113); insert into sales values(seq_nbr.nextval,'王海',to_date('2009-5-2','yyyy/mm/dd'),88); insert into sales values(seq_nbr.nextval,'高春梅',to_date('2009-5-2','yyyy/mm/dd'),35.5); insert into sales values(seq_nbr.nextval,'刘万理',to_date('2009-5-2','yyyy/mm/dd'),125); insert into sales values(seq_nbr.nextval,'王海', to_date('2009-5-3','yyyy/mm/dd'),92); insert into sales values(seq_nbr.nextval,'高春梅',to_date('2009-5-3','yyyy/mm/dd'),93); insert into sales values(seq_nbr.nextval,'刘万理',to_date('2009-5-3','yyyy/mm/dd'),167); insert into sales values(seq_nbr.nextval,'王海', to_date('2009-5-4','yyyy/mm/dd'),123.5); insert into sales values(seq_nbr.nextval,'高春梅',to_date('2009-5-4','yyyy/mm/dd'),200); insert into sales values(seq_nbr.nextval,'刘万理',to_date('2009-5-4','yyyy/mm/dd'),2); insert into sales values(seq_nbr.nextval,'高春梅',to_date('2009-6-1','yyyy/mm/dd'),190); insert into sales values(seq_nbr.nextval,'王海',to_date('2009-6-1','yyyy/mm/dd'),110.5); insert into sales values(seq_nbr.nextval,'刘万理',to_date('2009-6-1','yyyy/mm/dd'),213); insert into sales values(seq_nbr.nextval,'刘万理',to_date('2009-10-1','yyyy/mm/dd'),1123); insert into sales values(seq_nbr.nextval,'王海',to_date('2009-10-1','yyyy/mm/dd'),780); insert into sales values(seq_nbr.nextval,'高春梅',to_date('2009-10-1','yyyy/mm/dd'),310); insert into sales values(seq_nbr.nextval,'高春梅',to_date('2009-10-2','yyyy/mm/dd'),139); insert into sales values(seq_nbr.nextval,'王海',to_date('2009-10-2','yyyy/mm/dd'),1110.5); insert into sales values(seq_nbr.nextval,'刘万理',to_date('2009-10-2','yyyy/mm/dd'),998); insert into sales values(seq_nbr.nextval,'高春梅',to_date('2009-10-3','yyyy/mm/dd'),120); insert into sales values(seq_nbr.nextval,'高春梅',to_date('2009-10-4','yyyy/mm/dd'),10); insert into sales values(seq_nbr.nextval,'刘万理',to_date('2009-10-4','yyyy/mm/dd'),234); insert into sales values(seq_nbr.nextval,'王海',to_date('2009-10-5','yyyy/mm/dd'),110.5); insert into sales values(seq_nbr.nextval,'刘万理',to_date('2009-10-6','yyyy/mm/dd'),23); insert into sales values(seq_nbr.nextval,'王海',to_date('2009-10-7','yyyy/mm/dd'),10.5);
找出在各次促销活动中,销售量最高的销售员。code
请编制一条SQL来完成这个查询。(尽可能考虑多种写法)blog
select p.promo_name,s.clerk_name,sum(s.sale_amount) top_sale from promotions p inner join sales s on s.sale_date between p.start_date and p.end_date group by p.promo_name,s.clerk_name,p.start_date,p.end_date having sum(s.sale_amount) >= all( select sum(s2.sale_amount) from sales s2 where s.clerk_name <> s2.clerk_name and s2.sale_date between p.start_date and p.end_date group by s2.clerk_name ); SELECT s1.clerk_name,p.promo_name,p.start_date,p.end_date,SUM(s1.sale_amount) FROM sales s1 INNER JOIN promotions p ON s1.sale_date BETWEEN p.start_date AND p.end_date group by s1.clerk_name,p.promo_name,p.start_date,p.end_date HAVING SUM(s1.sale_amount)>= ALL ( SELECT SUM(s2.sale_amount) FROM sales s2 WHERE s2.sale_date BETWEEN p.start_date AND p.end_date GROUP BY s2.clerk_name );
财务咨询顾问的收入统计问题ci
金太阳财务咨询服务公司,聘请了一些财务顾问提供财务操做咨询服务,这些顾问都以兼职形式为公司服务,公司将按小时为顾问工做计算薪酬。it
具体表信息以下:io
a. 顾问信息表 (consultant)table
create table consultant( cst_id int primary key, cst_name varchar2(30) not null ); insert into consultant values(1, 'david'); insert into consultant values(2, 'henry'); insert into consultant values(3, 'mary'); insert into consultant values(4, 'kent');
b. 顾问费率表 (billings)class
不一样级别的顾问,在不一样的时期,每小时的收费是不一样的,公司会根据状况上调或者下调顾问的小时佣金待遇。date
create table billings( cst_id int not null, bill_date date not null, bill_rate int not null, constraint PK_BILLING PRIMARY KEY(cst_id,bill_date), constraint FK_BILLING_EMP FOREIGN KEY (cst_id) references consultant(cst_id) ); insert into billings values(1, to_date('2010-1-1' ,'yyyy/mm/dd'),50); insert into billings values(2, to_date('2010-1-1' ,'yyyy/mm/dd'),60); insert into billings values(3, to_date('2010-1-1' ,'yyyy/mm/dd'),70); insert into billings values(4, to_date('2010-1-1' ,'yyyy/mm/dd'),40); insert into billings values(1, to_date('2011-1-1' ,'yyyy/mm/dd'),60); insert into billings values(4, to_date('2011-1-1' ,'yyyy/mm/dd'),45);
c. 顾问工做状况记录表 (hoursworked)
create table hoursworked( list_id int primary key, cst_id int not null, work_date date not null, bill_hrs decimal(5,2) not null, constraint FK_HW_EMP FOREIGN KEY (cst_id) references consultant(cst_id) ); insert into hoursworked values(1,1, to_date('2010-7-1','yyyy/mm/dd'),3); insert into hoursworked values(2,1, to_date('2010-8-1','yyyy/mm/dd'),5); insert into hoursworked values(3,2, to_date('2010-7-1','yyyy/mm/dd'),2); insert into hoursworked values(4,1, to_date('2011-7-1','yyyy/mm/dd'),4); insert into hoursworked values(5,3, to_date('2011-8-1','yyyy/mm/dd'),3.5); insert into hoursworked values(6,4, to_date('2010-9-1','yyyy/mm/dd'),10); insert into hoursworked values(7,4, to_date('2011-8-1','yyyy/mm/dd'),6);
求解:
咱们须要你编写一个SQL查询语句,显示顾问的名字以及其总的顾问费用。
select c.cst_id,e.cst_name,sum(d.bill_rate*c.bill_hrs) total_fee from ( select h.cst_id,h.work_date,max(b.bill_date) bill_date, h.bill_hrs from billings b inner join hoursworked h on h.cst_id=b.cst_id and h.work_date>=b.bill_date group by h.cst_id,h.work_date,h.bill_hrs )c,billings d,consultant e where c.cst_id=d.cst_id and c.bill_date=d.bill_date and c.cst_id=e.cst_id group by c.cst_id,e.cst_name order by c.cst_id;