如何创建可以过滤计数的SQL查询?

时间:2009-12-20 18:13:26

标签: sql sql-server

简短的数据库描述“Ships”:

正在考虑参加第二次世界大战的海军舰艇数据库。该数据库具有以下关系:

  • 班级(班级,类型,国家,号码,号码,位移)
  • 船舶(名称,级别,已启动)
  • 战斗(姓名,日期)
  • 结果(船舶,战斗,结果)

课程中的船舶安排在一个项目中。通常会为一类人员分配正在考虑的类别中的第一艘船的名称(船头);否则,类名与数据库中的任何船名不一致。

Classes关系包括班级名称,类型(战斗舰的bb或战斗巡洋舰的bc),建造船舶的国家,主炮数量,枪口径(枪管直径,英寸) )和排水量(重量以吨计)。

船舶关系包括船名,类名和发射年份。战斗关系包括船舶参与战斗的名称和日期;而他们参与战斗的结果(沉没,受损或无伤害 - 好的)是在结果关系中。注意:结果关系可能包括未包含在船舶关系中的船舶。

指出来自同一国家的至少三艘船参加的战斗。

有人可以帮助解决这个问题吗?我已经有一段时间没用SQL了。

修改

正如我被告知不允许提出一个广泛的问题,我会更具体:

我想过如何做到这一点,但最终我需要某种方式来计算重复数据? 为exmaple ..列表

如果我说算数> 2我会得到一个和c

名称 一个 一个 b 一个 b 一个 C C ç

2 个答案:

答案 0 :(得分:1)

试试这个

SELECT *
FROM   Battles b
WHERE  EXISTS (
       SELECT     NULL
       FROM       Outcomes   o            
       INNER JOIN Ships      s
       ON         o.ship   = s.name
       INNER JOIN Classes    c
       ON         s.class  = c.class
       WHERE      o.battle = b.name
       GROUP BY   c.country
       HAVING     count(*) >= 3
   )

答案 1 :(得分:0)

我不理解你的描述中的所有内容,但让我们从这开始。这够近了吗?不太确定“... Outcomes relation may include the ships not included in the Ships relation”是什么意思。希望这能让你开始。

ship_model_01

SELECT DISTINCT b.[Name] AS [Battle Name]
FROM    Class AS c
        JOIN Ship AS s ON s.ClassID = c.ClassID
        JOIN Outcome AS o ON o.ShipID = s.ShipID
        JOIN Battle AS b ON b.BattleID = o.BattleID
GROUP BY b.[Name], c.Country
HAVING  COUNT(c.Country) >= 3