Sql server 精确到小数点后两位,确定所有战列舰的平均火炮数量(包括结果表中的火炮)

Sql server 精确到小数点后两位,确定所有战列舰的平均火炮数量(包括结果表中的火炮),sql-server,tsql,Sql Server,Tsql,简短的数据库描述: 参加第二次世界大战的海军舰艇数据库正在考虑之中。数据库由以下关系组成: 类别类别、类型、国家/地区、数字、孔、位移 船舶名称、等级、下水 战斗名称、日期 结果、战斗、结果 不同级别的船舶都有相同的总体设计。类通常被指定为根据相应设计建造的第一艘船舶的名称,或与数据库中的任何船舶名称不同的名称。将其名称指定给某个类别的船舶称为领航船舶。 “类别”关系包括类别名称、类型可以是作战舰艇的bb,也可以是作战巡洋舰的bc、舰艇建造国、主炮数量、火炮口径孔径(英寸)和排水量(吨)。Shi

简短的数据库描述:

参加第二次世界大战的海军舰艇数据库正在考虑之中。数据库由以下关系组成: 类别类别、类型、国家/地区、数字、孔、位移 船舶名称、等级、下水 战斗名称、日期 结果、战斗、结果 不同级别的船舶都有相同的总体设计。类通常被指定为根据相应设计建造的第一艘船舶的名称,或与数据库中的任何船舶名称不同的名称。将其名称指定给某个类别的船舶称为领航船舶。 “类别”关系包括类别名称、类型可以是作战舰艇的bb,也可以是作战巡洋舰的bc、舰艇建造国、主炮数量、火炮口径孔径(英寸)和排水量(吨)。Ships关系保存有关船舶名称、其相应类别的名称以及船舶下水年份的信息。“战斗”关系包含舰船参与的战斗的名称和日期,以及“结果”关系-给定舰船的战斗结果可能是沉没、损坏或OK,最后一个值表示舰船在战斗中安然无恙。 注:1结果关系可能包含ships关系中不存在的ships。2沉船不能参加以后的战斗。3由于历史原因,在许多演习中,主力舰被称为主力舰

问题: 精确到小数点后两位,确定所有战列舰的平均火炮数量,包括结果表中的火炮数量

当我尝试执行以下查询时,不会出现如下错误:

您的查询在第一个可用数据集上返回了正确的数据集 数据库,但在第二次检查时返回了不正确的数据集 数据库


如果单个查询本身是有效的,那么我认为别名可能会有问题,请确保您的所有别名都是唯一的,并正确用于所有字段名——这是沿着这些行的,但您必须确保别名始终引用所需的表

SELECT CAST( AVG( t.numGunsx *1.0) AS NUMERIC(10,2)) AS TheAverage FROM 
( 
   SELECT c1.numguns numgunsx FROM [Classes] c1 
       JOIN Ships s1 ON c1.class = s1.class 
       WHERE s1.type='bb'  
       UNION ALL 
   SELECT c2.numguns numgunsx FROM [Classes] c2 
       JOIN Outcomes o2 ON c2.class = o2.ship 
       WHERE c2.type='bb' and o2.ship NOT IN(SELECT sx.name FROM Ships sx) 
) t

请尝试此操作。

不太可能有人会阅读您描述数据库结构的文字墙-请提供更具可读性的内容来演示模式和说明性数据,如CREATE TABLE和INSERT语句,或者至少提供一个包含一些示例数据的文字表。如果您想得到正确的答案,阅读并尝试编辑您的问题可能会对您有所帮助。请确保所有表格都有唯一的别名,并且您在字段选择中使用了所有别名。请您提供解决方案,即使我尝试过,但仍然显示错误消息,例如您的查询在第一个可用数据库上返回了正确的数据集,但在第二个检查数据库上返回了错误的数据集。*数据不匹配1您好,我正在尝试,但无法获得确切的解决方案..不知道我哪里出错..帮助我获得更多知识
SELECT CAST( AVG( t.numGunsx *1.0) AS NUMERIC(10,2)) AS TheAverage FROM 
( 
   SELECT c1.numguns numgunsx FROM [Classes] c1 
       JOIN Ships s1 ON c1.class = s1.class 
       WHERE s1.type='bb'  
       UNION ALL 
   SELECT c2.numguns numgunsx FROM [Classes] c2 
       JOIN Outcomes o2 ON c2.class = o2.ship 
       WHERE c2.type='bb' and o2.ship NOT IN(SELECT sx.name FROM Ships sx) 
) t
select cast(avg(numguns*1.0) as numeric(10,2)) as Avg_numG from
(select name,ships.class,numguns from classes,ships
where ships.class=classes.class and type='bb'
UNION
select ship,ship,numguns from classes, outcomes
where classes.class= outcomes.ship and outcomes.ship not in (select name    
from ships) and type='bb'
) T