2012-11-03 41 views
-2

数据库需要跟踪有关网站注册用户以及他们上传,查看和评分的视频的信息。每个上传的视频都被放入一组预定义的内容类别中。用户可以多次观看相同的视频;他们可能会在每次观看视频时对视频给予不同的评分,或者他们可能根本不评分。编写复杂的mysql查询

为了赚钱,视频分享服务取决于广告收入。当用户观看视频时,他们通常(但不总是)在视频开始之前显示广告。任何用户都可以创建一个广告并支付固定的总价格以使其显示指定的次数(需要的视图数量)。广告商可以通过为他们的广告指定一个或多个内容类别来针对具有相关兴趣的用户的广告;广告更有可能与这些所选类别中的视频一起显示。出于会计和统计目的,数据库跟踪何时显示广告以及用户是否点击广告。

已经上传了许多高品质视频的一些多产用户可能会被邀请进入收入分享合作伙伴关系,他们可以从他们上传的视频中显示的广告中获得部分收入。

我有以下的数据库MySql中创建:

USERS (用户名,密码,姓名,电子邮件,date_registered)

视频 (VIDEO_ID,标题,uploaded_by,UPLOADED_AT,类别)

ADVERTISEMENTS (ad_id,广告客户,价格views_wanted)

Ad_Target_Categories (ad_id,类别)

VIEWS (用户,视频,viewed_at,等级,ad_shown,ad_clicked)

PARTNERS 我已经使用SQL语句创建的数据库(用户名,REVENUE_SHARE)

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)列出每个广告的广告ID,广告客户名称和电子邮件地址,每千次展示费用(每千次展示费用,每千个观看次数支付的价格)低于7美分。

此查询正确:?

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

我写在下面的SQL查询,考虑到上述数据库

1)找到针对每个类别中的所有广告的总代价也要帮助。 (针对多个类别的广告在每一个它是针对类别计算在内。)

2)名单谁曾出更多的时间比他们曾要求其广告中的至少一个所有广告客户的名称。每个广告客户不应多次列出。

3)找到2012年6月份获得最多收益的三位合作伙伴。列出他们的名字和2012年6月的收入。合作伙伴根据其收入分成和每个广告展示基础进行支付。

4)查找自上传后的前两周内没有收到任何视图的所有视频。对于每个这样的视频,给出上传用户的名称,视频标题以及上传的日期和时间。

5)按​​登录最新成员的日期顺序列出所有用户的名字。对于已上传至少一个视频的用户,还要提供他们观看次数最多的视频的观看次数。

6)找到五个视频的平均评分最低,尽管他们已被自己的上传者评为最高评分为5分。列出他们的视频ID,标题和平均评分。

+2

简单地说明您的要求并不构成对SO的真正问题。为什么有人为你做你的工作? (并且免费?) –

+4

恐怕您将此协作网站与DoMyWork.com或ICantBeBothered.net混淆。请阅读本网站的常见问题(http://stackoverflow.com/faq)以更好地了解问题的类型这非常适合这个论坛。 – mjv

+0

你注册了那些不是你:) –

回答

2

回答你的问题“这个查询是否正确”,我注意到查询将不会运行,因为有一个额外的FROM卡在中间。

一旦你得到它的运行,确定它是否正确的方法是在表中插入一组包含你可以想到的每个边界情况的行(比如10或20)(比数量多,小于金额,恰好等于金额),以便您事先知道正确的返回行集合是什么。然后,运行您的查询并与预期输出进行比较。

我还建议你对列数据类型进行一些考虑,而不是将它们都设置为VARCHAR。您会看到有几种类型更适合存储金额。使用VARCHAR,你可能会得到一些产生错误结果的比较异常。