Извените что не по теме, но помница кто то здесь тоже решал задачи с
этого сайта.... Подскажите плз. решение а то мой мозг ужо закипает....
Это уже третий вариант моего решения (видимо самое близкое к истине,
всего 1 несовпадение осталось :) ), все равно не прохожу проверку на
второй базе...


select c.class, count(c.class)  from classes c
      left join (select s1.class, s1.name from ships s1
                 where s1.name in (select o1.ship from outcomes o1
                                   where o1.result = 'sunk')) s

      on s.class = c.class
      left join outcomes o
      on o.ship = c.class  and o.result  = 'sunk'
      and o.ship not in  (select ww.name from ships ww)

      where o.ship is not null or s.name is not null
      group by c.class


      having c.class in
(
      select  c11.class  from classes c11
      left join ships s11
      on s11.class = c11.class
      left join outcomes o11
      on o11.ship = c11.class
      group by c11.class
      having count(c11.class) > 2)



Задание: 57
Для классов, имеющих потери в виде потопленных кораблей и не менее 3
кораблей в базе данных, вывести имя класса и число потопленных
кораблей.

Краткая информация о базе данных "Корабли":

Рассматривается БД кораблей, участвовавших во второй мировой войне.
Имеются следующие отношения:
Classes (class, type, country, numGuns, bore, displacement)
Ships (name, class, launched)
Battles (name, date)
Outcomes (ship, battle, result)
Корабли в <<классах>> построены по одному и тому же проекту, и классу
присваивается либо имя первого корабля, построенного по данному
проекту, либо названию класса дается имя проекта, которое не совпадает
ни с одним из кораблей. Корабль, давший название классу, называется
головным.
Отношение Classes содержит имя класса, тип (bb для боевого (линейного)
корабля или bc для боевого крейсера), страну, в которой построен
корабль, число главных орудий, калибр орудий (диаметр ствола орудия в
дюймах) и водоизмещение ( вес в тоннах). В отношении Ships записаны
название корабля, имя его класса и год спуска на воду. В отношение
Battles включены название и дата битвы, в которой участвовали корабли,
а в отношении Outcomes - результат участия данного корабля в битве
(потоплен-sunk, поврежден - damaged или невредим - OK). Замечание. В
отношение Outcomes могут входить корабли, отсутствующие в отношении
Ships.


Ответить