1月15日(金)2コマ目

今日、やったこと

ビューのおさらい課題 その1、その2

今日の課題

解答例をあげておきます。

ビューのおさらい課題 その1

テーブル作成

商品マスタ

create table 商品マスタ(

ID number(2),

商品名  nvarchar2(64) not null,

定価 number(5),

constraint pk_商品 primary key(ID),

constraint chk_商品定価 check(定価>=0)

);

顧客マスタ

create table 顧客マスタ(

ID number(2),

氏名 nvarchar2(64) not null,

constraint pk_顧客 primary key(ID)

);

売上データ

create table 売上データ(

ID number(4),

商品ID number(2),

顧客ID number(2),

数量 number(4),

売上日 date,

constraint pk_売上データ primary key(ID, 商品ID),

constraint fk_売上_商品 foreign key(商品ID) references 商品マスタ(ID),

constraint fk_売上_顧客 foreign key(顧客ID) references 顧客マスタ(ID),

constraint chk_売上数量 check(数量 >= 0)

);


ビュー作成

商品別販売回数

create or replace view 商品別販売回数(商品名, 販売回数) as 

select 商品名, count(*) 

from 商品マスタ, 売上データ

where 商品マスタ.ID=売上データ.商品ID

group by 商品名;


顧客別商品購入回数

create or replace view 顧客別商品購入回数(顧客名, 商品名, 購入回数) as 

select 氏名, 商品名, count(*)

from 商品マスタ, 顧客マスタ, 売上データ

where 商品マスタ.ID=売上データ.商品ID and 顧客マスタ.ID=売上データ.顧客ID

group by 氏名, 商品名

order by 氏名, 商品名;


商品別販売数量

create or replace view 商品別販売数量(商品名, 販売数量) as

select 商品名, sum(数量)

from 商品マスタ, 売上データ

where 商品マスタ.ID=売上データ.商品ID

group by 商品名;


商品別売上金額

create or replace view 商品別売上金額(商品名, 売上金額) as 

select 商品名, sum(定価*数量)

from 商品マスタ, 売上データ

where 商品マスタ.ID=売上データ.商品ID

group by 商品名;


顧客商品別売上金額

create or replace view 顧客商品別売上金額(顧客名, 商品名, 売上金額) as

select 氏名, 商品名, sum(定価*数量)

from 商品マスタ, 顧客マスタ, 売上データ

where 商品マスタ.ID=売上データ.商品ID and 顧客マスタ.ID=売上データ.顧客ID

group by 氏名, 商品名;


売上一覧

create or replace view 売上一覧(顧客名, 売上日, 売上金額) as

select 氏名, 売上日, sum(定価*数量)

from 商品マスタ, 顧客マスタ, 売上データ

where 商品マスタ.ID=売上データ.商品ID and 顧客マスタ.ID=売上データ.顧客ID

group by 売上データ.ID, 氏名, 売上日

order by 売上日, sum(定価*数量);


ようかん最中売上データ

create or replace view ようかん最中売上データ(商品名, 販売回数, 売上数量, 売上金額) as

select 商品名,count(*), sum(数量), sum(定価*数量)

from 商品マスタ, 売上データ

where 商品マスタ.ID=売上データ.商品ID and (商品名='小形ようかん' or 商品名='最中')

group by 商品名;


高額売上データ

create or replace view 高額売上データ(顧客名, 売上日, 販売商品数, 売上金額) as

select 氏名, 売上日, sum(数量), sum(定価*数量)

from 商品マスタ, 顧客マスタ, 売上データ

where 商品マスタ.ID=売上データ.商品ID and 顧客マスタ.ID=売上データ.顧客ID

group by 売上データ.ID, 氏名, 売上日

having sum(定価*数量) >= 5000

order by 売上日,sum(定価*数量);


ビュー作成のおさらい課題 その2

テーブル作成

ジャンルマスタ

create table ジャンルマスタ(

ID number(2),

ジャンル名  nvarchar2(64) not null,

constraint pk_ジャンル primary key(ID)

);


商品マスタ

create table 商品マスタ(

ID number(2),

商品名  nvarchar2(64) not null,

ジャンルID number(2),

定価 number(5),

constraint pk_商品 primary key(ID),

constraint pk_商品_ジャンル foreign key(ジャンルID) references ジャンルマスタ(ID),

constraint chk_商品定価 check(定価>=0)

);


顧客マスタ

create table 顧客マスタ(

ID number(2),

氏名 nvarchar2(64) not null,

constraint pk_顧客 primary key(ID)

);


売上データ

create table 売上データ(

ID number(4),

商品ID number(2),

顧客ID number(2),

数量 number(4),

売上日 date,

constraint pk_売上データ primary key(ID, 商品ID),

constraint fk_売上_商品 foreign key(商品ID) references 商品マスタ(ID),

constraint fk_売上_顧客 foreign key(顧客ID) references 顧客マスタ(ID),

constraint chk_売上数量 check(数量 >= 0)

);


ビュー作成

ジャンル別売上金額

create or replace view ジャンル別売上金額(ジャンル名, 売上金額) as 
select ジャンル名, sum(定価*数量) 
from ジャンルマスタ, 商品マスタ, 売上データ
where ジャンルマスタ.ID=商品マスタ.ジャンルID AND 商品マスタ.ID=売上データ.商品ID
group by ジャンル名;

売上一覧

create or replace view 売上一覧(顧客名, 売上日, 売上金額, 商品数) as
select 氏名, 売上日, sum(定価*数量), sum(数量)
from 商品マスタ, 顧客マスタ, 売上データ
where 商品マスタ.ID=売上データ.商品ID and 顧客マスタ.ID=売上データ.顧客ID
group by 売上データ.ID, 氏名, 売上日
order by 売上日, sum(定価*数量);

最高売上数商品データ

create or replace view 最高売上数商品データ(商品名, ジャンル名, 売上数量) as
select 商品名, ジャンル名, sum(数量) AS 売上数量
from ジャンルマスタ, 商品マスタ, 売上データ
where ジャンルマスタ.ID=商品マスタ.ジャンルID AND 商品マスタ.ID=売上データ.商品ID
group by 商品名, ジャンル名
having sum(数量) = 
(select max(売上数量) 
from (
  select sum(数量) AS 売上数量
  from 売上データ
  group by 商品ID
  )
);

最高売上金額商品データ

create or replace view 最高売上金額商品データ(商品名, ジャンル名, 売上金額) as
select 商品名, ジャンル名, sum(定価*数量) AS 売上金額
from ジャンルマスタ, 商品マスタ, 売上データ
where ジャンルマスタ.ID=商品マスタ.ジャンルID AND 商品マスタ.ID=売上データ.商品ID
group by 商品名, ジャンル名
having sum(定価*数量) = 
(select max(売上金額) 
from (
  select sum(定価*数量) AS 売上金額
  from 商品マスタ, 売上データ
  where 商品マスタ.ID=売上データ.商品ID
  group by 商品名
  )
);

最高売上金額データ

create or replace view 最高売上金額データ(商品名, ジャンル名, 数量) as
select 商品名, ジャンル名, 数量
from ジャンルマスタ, 商品マスタ, 売上データ
where ジャンルマスタ.ID=商品マスタ.ジャンルID AND 商品マスタ.ID=売上データ.商品ID AND 
売上データ.ID = (
  select 売上データ.ID 
  from 商品マスタ, 売上データ
  where 商品マスタ.ID=売上データ.商品ID
  group by 売上データ.ID
  having sum(定価*数量) = 
  (select max(売上金額) 
    from (
      select 売上データ.ID, sum(定価*数量) AS 売上金額
      from 商品マスタ, 売上データ
      where 商品マスタ.ID=売上データ.商品ID
      group by 売上データ.ID
    )
  )
);

次回は紙のテストをします。

コメント

このブログの人気の投稿

11月27日(金)2コマ目

1月29日(金)2コマ目