Ниже приведено решение, в котором правильно проведен учет потопленных кораблей. Незначительную ошибку в этом решении предлагаем найти самостоятельно. В случае затруднения вернитесь к решению 3.12.3.
SELECT class, SUM(r) sunks FROM (SELECT name, class, CASE WHEN result = 'sunk' THEN 1 ELSE 0 END r FROM Ships AS s LEFT JOIN Outcomes AS o ON o.ship = s.name UNION SELECT ship, class, CASE WHEN result = 'sunk' THEN 1 ELSE 0 END r FROM Classes c JOIN (SELECT * FROM Outcomes WHERE NOT Ship IN (SELECT name FROM Ships) ) AS ot ON ot.ship = c.class ) AS b GROUP BY class;
Перейти к обсуждению упражнения 56
Решить упражнение на SQL-EX.RU