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;
    
  • 相关阅读:
    Linq聚合操作之Aggregate,Count,Sum,Distinct源码分析
    Linq分区操作之Skip,SkipWhile,Take,TakeWhile源码分析
    Linq生成操作之DefautIfEmpty,Empty,Range,Repeat源码分析
    Linq基础操作之Select,Where,OrderBy,ThenBy源码分析
    PAT 1152 Google Recruitment
    PAT 1092 To Buy or Not to Buy
    PAT 1081 Rational Sum
    PAT 1084 Broken Keyboard
    PAT 1077 Kuchiguse
    PAT 1073 Scientific Notation
  • 原文地址:https://www.cnblogs.com/mumuyinxin/p/10787579.html
Copyright © 2011-2022 走看看