-3

データベースは、Web サイトの登録ユーザーと、ユーザーがアップロード、表示、評価した動画に関する情報を追跡する必要があります。アップロードされた各ビデオは、定義済みの一連のコンテンツ カテゴリのいずれかに分類されます。ユーザーは同じ動画を複数回視聴できます。ビデオを視聴するたびに異なる評価を付ける場合もあれば、まったく評価しない場合もあります。

お金を稼ぐために、動画共有サービスは広告収入に依存しています。ユーザーがビデオを視聴すると、ビデオが始まる前に広告が表示されることがよくあります (常にではありません)。誰でも広告を作成し、定額料金を支払うことで指定回数(希望視聴回数)表示させることができます。広告主は、広告に 1 つ以上のコンテンツ カテゴリを指定することにより、関連する関心を持つユーザーに広告をターゲティングできます。広告は、選択したカテゴリの動画と一緒に表示される可能性が高くなります。会計および統計の目的で、データベースは広告がいつ表示されたか、およびユーザーが広告をクリックしたかどうかを追跡します。

多くの高品質のビデオをアップロードした多作のユーザーの中には、アップロードされたビデオに表示される広告からの収益の一部が支払われる収益分配パートナーシップに招待される場合があります。

MySqlで作成された次のデータベースがあります:

USERS (ユーザー名、パスワード、名前、メールアドレス、登録日)

ViDEOS (video_id,title,uploaded_by,uploaded_at,category)

広告 (ad_id,advertiser,price,views_wanted)

Ad_Target_Categories (ad_id,category)

VIEWS (ユーザー、ビデオ、viewed_at、rating、ad_shown、ad_clicked)

パートナー (username,revenue_share)

SQL ステートメントを使用してデータベースを作成しました。

create table Users
(
username varchar(400) not null,
password varchar(400) not null,
name varchar(400) not null,
email varchar(400) not null,
date_registered date,
primary key(username)
);

create table Videos
(
video_id varchar(400) not null,
title varchar(400) not null,
uploaded_by varchar(400) not null,
uploaded_at varchar(400) not null,
category varchar(400) not null,
primary key(video_id),
foreign key(uploaded_by) references Users(username)
);

create table Advertisements
(
ad_id varchar(400) not null,
advertiser varchar(400) not null,
price varchar(400) not null,
views_wanted varchar(400) not null,
primary key(ad_id),
foreign key(advertiser) references Users(username)
);

create table Ad_Target_Categories
(
ad_id varchar(400) not null,
category varchar(400) not null,
primary key(ad_id,category),
foreign key(ad_id) references Advertisements(ad_id)
);

create table Views
(
user varchar(400) not null,
video varchar(400) not null,
viewed_at varchar(400) not null,
rating varchar(400) not null,
ad_shown varchar(400) not null,
ad_clicked varchar(400) not null,
primary key(user,video,viewed_at),
foreign key(user) references Users(username),
foreign key(video) references Videos(video_id)
);

create table Partners
(
username varchar(400) not null,
revenue_share varchar(400) not null,
primary key(username),
foreign key(username) references Users(username)
);

0) 7 セント未満の CPM (1000 回あたりのコスト、1,000 回の視聴に対して支払われる価格) の広告ごとに、広告 ID、広告主名、および電子メールをリストします。

このクエリは正しいですか : ?

select *from ad_id,advertiser,email
from advertisements,users
where price <0.07;

上記のデータベースを考慮して、次の SQL クエリを作成する際に助けが必要でした

1) 各カテゴリを対象としたすべての広告の合計価格を見つけます。(複数のカテゴリを対象とした広告は、対象となっているカテゴリごとにカウントされます。)

2) 少なくとも 1 つの広告を要求した回数よりも多く表示したすべての広告主の名前をリストします。各広告主を複数回掲載することはできません。

3) 2012 年 6 月に最も多くの収益を上げた 3 人のパートナーを見つけてください。パートナーの名前と 2012 年 6 月の収益を挙げてください。パートナーには、レベニュー シェアと表示された広告ごとに基づいて支払いが行われます。

4) アップロードされてから最初の 2 週間以降、視聴されていないすべての動画を検索します。そのような動画ごとに、それをアップロードしたアップロード ユーザーの名前、動画のタイトル、アップロードされた日時を記入します。

5) すべてのユーザーの名前を、登録日が新しいメンバーから順に並べます。少なくとも 1 本の動画をアップロードしたユーザーについては、最も視聴された動画の視聴回数も記入してください。

6) 5 の最高評価で自分のアップローダによって評価されたにもかかわらず、最低平均評価の 5 つのビデオを見つけます。ビデオ ID、タイトル、平均評価をリストします。

4

1 に答える 1

2

「このクエリは正しいですか」という質問に答えると、途中で余分な FROM がスタックしているため、クエリがまったく実行されないことに注意してください。

実行したら、それが正しいかどうかを判断する手法は、考えられるすべてのエッジ ケース (量より多い、量より少ない) を含む一連の行 (たとえば、10 または 20) をテーブルに挿入することです。 、量に正確に等しい) を使用して、返される行の正しいセットが何であるかを事前に知ることができます。次に、クエリを実行し、予想される出力と比較します。

また、列のデータ型をすべて VARCHAR にするのではなく、もう少し考えることをお勧めします。金額を格納するのにより適切なタイプがいくつかあることがわかります。VARCHAR を使用すると、誤った結果を生成する比較異常が発生する場合があります。

于 2012-11-03T02:53:46.893 に答える