下面是两个带有模式的表:
船舶(名称、yearLaunched、国家、numGuns、gunSize、排水量) 战斗(船,battleName,结果)
典型的船舶元组是:
(“新泽西”,1943年,“美国”,9,16,46000)
这意味着新泽西号战舰是1943年发射的;它属于美国,携带9支16英寸口径(内径或内径的枪管)枪支,重量46,000吨。
一个典型的战斗元组是:
(“胡德”、“北大西洋”、“沉没”)
也就是说,HM.S.胡德号在北大西洋战役中沉没了。其他可能的结果是“ok”和“损坏”。
下面是一个棘手的问题:对于每一个参与这场战斗的国家(有一艘或多艘战舰参与),为Surigao海峡的战斗提供了沉没的战舰数量。注意:这个问题非常棘手。特别是,你需要处理的(历史)案例,一个国家参与战斗,但没有任何船只沉没。。
到目前为止我尝试过的。
SELECT country,COUNT(name)
FROM ships RIGHT JOIN battles
ON ships.name=battles.ship
WHERE battleName='Battle1' AND result='sunk'
GROUP BY country发布于 2012-09-11 07:19:10
参加那次战斗的国家(有一艘或多艘战舰参加)
这意味着在battleName海峡的战斗中至少有过一次记录。意思是一个INNER JOIN。
给出它沉没的战舰数量。
这是一个有条件的计数,这里是“技巧”。你可以用一个条件结束的和,然后你可以让计数船沉没。
SELECT country,SUM(CASE WHEN result = 'sunk' THEN 1 ELSE 0 END) AS TotalShipSunk
FROM ships
INNER JOIN battles
ON ships.name=battles.ship
WHERE battleName='Surigao Strait'
GROUP BY country发布于 2012-09-11 06:36:53
您需要加入这些表,我猜与之的关系是通过name of the ship实现的。试试这个,
SELECT a.country,
SUM(CASE WHEN b.result = 'SUNK' THEN 1 ELSE 0 END) totalSunkShips,
SUM(CASE WHEN b.result = 'OK' THEN 1 ELSE 0 END) totalUNSunkShips
FROM battles a
INNER JOIN ships b
ON a.ship = b.name
WHERE b.battleName = 'Surigao Strait'
GROUP BY a.country发布于 2012-09-11 07:21:49
样本船记录
name yearLaunched country numGuns gunSize displacement
New Jersey 1943 USA 9 16 46000
Surigao Strait Battle ship USA 1800 USA 9 16 5000
Surigao Strait Battle ship USA 1800 USA 9 16 5000
Surigao Strait Battle ship UK 1800 UK 7 16 27000
Surigao Strait Battle ship France 1800 France 9 16 5000
Surigao Strait Battle ship Urugaya 1800 Urugaya 7 16 27000
New Jersey 1943 UK 9 16 46000样本作战记录
ship battleName result
Hood North Atlantic sunk
Surigao Strait Battle ship USA Surigao Strait sunk
Surigao Strait Battle ship UK Surigao Strait damaged
Surigao Strait Battle ship France Surigao Strait ok
Surigao Strait Battle ship Urugaya Surigao Strait sunk这就是你要找的吗?
SELECT s.country,Count(s.name) AS Cnt
FROM ships s
JOIN (SELECT *
FROM Battles
WHERE battleName='Surigao Strait' AND result='sunk' )b
ON s.name=b.ship
GROUP BY s.country结果
国家
Urugaya 1
USA 2https://stackoverflow.com/questions/12363962
复制相似问题