zoukankan      html  css  js  c++  java
  • Oracle语法 及 SQL题目(二)

    课例复制

    思考题四

    最近,经过你的努力,你得到了一份工作,成为了百货公司的一位经理。
    到位后,你发现你的销售数据库中有两张表,一个是商店促销时间的日历,另一个是在促销期间的销售额列表。
    你需要编写一个查询,告诉我们在每次促销中哪位职员的销售额最高,这样可以给那个职员发绩效奖金。

    -- 商店促销时间的日历
    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); 
    
    

    找出在各次促销活动中,销售量最高的销售员。

    请编制一条SQL来完成这个查询。(尽量考虑多种写法)

    解题思路

    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
    );
    

    思考题五

    财务咨询顾问的收入统计问题

    金太阳财务咨询服务公司,聘请了一些财务顾问提供财务操作咨询服务,这些顾问都以兼职形式为公司服务,公司将按小时为顾问工作计算薪酬。

    具体表信息如下:

    a. 顾问信息表 (consultant)

    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)

    不同级别的顾问,在不同的时期,每小时的收费是不同的,公司会根据情况上调或者下调顾问的小时佣金待遇。

    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;
    
  • 相关阅读:
    作业8: 软件工程学习总结
    用户体验——南通大学教务学生管理系统
    “构建之法互动游戏”感想
    第二次作业
    音乐播放器的发展演变
    C++用法的学习心得
    一、最后一次作业:软件工程学习总结
    设计一款给爸爸妈妈用的手机
    附加题1—— 我想搞懂的软工问题
    计算机病毒软件的发展演变
  • 原文地址:https://www.cnblogs.com/mumuyinxin/p/10787579.html
Copyright © 2011-2022 走看看