SQL'平均值'困境

时间:2015-11-09 18:15:03

标签: sql sql-server database

我对SQL很新;对于我的大学项目,我们正在为游戏创建数据库,并审查所述游戏。我的问题是我有一个名为" Games"的表格,其中包含多个属性,包括派生属性'评级&#39 ;;存在另一个表是Member_rates_games,其中包括4个值,唯一性,图形,设计和交互性。现在的问题是我不知道如何计算评级'在另一个表中使用这4个值的属性。我尝试评级AS AVG(Uniquness,Interactivity,Design,Graphics),但它没有工作,错误是它需要一个参数。那么我该如何解决这个问题呢?我求助于加入吗?还是有另一种解决方法吗?

如果Schema可以提供帮助,请参阅Schema:

游戏( game_ID ,name,release_date,age_limit,rating,email *)

Games_Rates_Members( game_ID 电子邮件,设计,互动,图片,唯一性)

非常感谢任何帮助。我使用Visual Studio w / SQL Server,而不是MYSQL。提前谢谢。

编辑:看起来我措辞不好,让我再试一次,所以这是我现在的SQL代码:

    CREATE TABLE Games(
    game_id int IDENTITY,
    name varchar (30) NOT NULL, 
    release_date date, 
    age_limit int NOT NULL, 
    rating int, 
    email varchar (50) NOT NULL, 
    CONSTRAINT PK_Games PRIMARY KEY (game_id), 
    CONSTRAINT FK_Games FOREIGN KEY (email) References Development_teams )

    CREATE TABLE Games_Rates_Members(
    game_id int NOT NULL, 
    email varchar (50) NOT NULL,
    design int NOT NULL,
    interactivity int NOT NULL,
    graphics int NOT NULL,
    uniqueness int NOT NULL,
    CONSTRAINT PK_Games_Rates_Members PRIMARY KEY (game_id, email),
    CONSTRAINT FK_Games_Rates_Members_1 FOREIGN KEY (game_id) References Games,
    CONSTRAINT FK_Games_Rates_Members_2 FOREIGN KEY (email) References Members
    )

现在,我的问题是当我在games表中插入一个值时,在rating属性中,我该怎么做才能让这个rating属性等同于Games_Rates_Members表中4个值的平均值。我希望这更清楚,原谅我的英语不够清楚。再次感谢。

2 个答案:

答案 0 :(得分:1)

我认为期望在游戏桌中自动填充值是一种糟糕的设计。这意味着对评级表的每次更改都会将更改级联到游戏表中。

这不是关系数据库的领先或最佳实践。在关系数据库中,您可以定义数据的关系,而不是数据生成规则。把它留给你的select语句。你希望得到每个游戏的平均值,当你选择游戏时计算它。你可以这样做:

SELECT Games.game_id, AVG((GRM.design,GRM.interactivity,GRM.graphics,GRM.uniqueness)/4) as rating
FROM Games
JOIN Games_Rates_Members GRM ON Games.game_id = GRM.game_id
GROUP BY Games.game_id
  

Sidenote,我不建议使用电子邮件作为用户密钥。如果有人更改电子邮件会怎样?而是使用指定的唯一整数键作为键。

答案 1 :(得分:0)

假设这4个值是数字的,并且您对来自不同用户的同一游戏有很多评论。

select game_ID, avg((design +  interactivity + graphics + uniqueness)/4) as rating
from Games_Rates_Members 
group by game_ID