четверг, 16 апреля 2020 г.

Перечислите названия головных кораблей, имеющихся в базе данных (учесть корабли в Outcomes).

Задание: 36 (Serge I: 2003-02-17)

Select name from ships where class = name
union
select ship as name from classes,outcomes where classes.class = outcomes.ship

В таблице Product найти модели, которые состоят только из цифр или только из латинских букв (A-Z, без учета регистра).

Задание: 35 (qwrqwr: 2012-11-23)

Вывод: номер модели, тип модели.
SELECT model, type
FROM product
WHERE upper(model) NOT like '%[^A-Z]%'
OR model not like '%[^0-9]%'

По Вашингтонскому международному договору от начала 1922 г. запрещалось строить линейные корабли водоизмещением более 35 тыс.тонн. Укажите корабли, нарушившие этот договор (учитывать только корабли c известным годом спуска на воду).

Задание: 34 (Serge I: 2002-11-04)
По Вашингтонскому международному договору от начала 1922 г. запрещалось строить линейные корабли водоизмещением более 35 тыс.тонн. Укажите корабли, нарушившие этот договор (учитывать только корабли c известным годом спуска на воду). Вывести названия кораблей.
Select name from classes,ships where launched >=1922 and displacement>35000 and type='bb' and
ships.class = classes.class

Укажите корабли, потопленные в сражениях в Северной Атлантике (North Atlantic). Вывод: ship.

Задание: 33 (Serge I: 2002-11-02)

SELECT o.ship FROM
BATTLES b
LEFT join outcomes o ON o.battle = b.name
WHERE b.name = 'North Atlantic' AND o.result = 'sunk'

Одной из характеристик корабля является половина куба калибра его главных орудий (mw). С точностью до 2 десятичных знаков определите среднее значение mw для кораблей каждой страны, у которой есть корабли в базе данных.

Задание: 32 (Serge I: 2003-02-17)

Select country, cast(avg((power(bore,3)/2)) as numeric(6,2)) as weight
from (select country, classes.class, bore, name from classes left join ships on classes.class=ships.class
union all
select distinct country, class, bore, ship from classes t1 left join outcomes t2 on t1.class=t2.ship
where ship=class and ship not in (select name from ships) ) a
where name IS NOT NULL group by country

Для классов кораблей, калибр орудий которых не менее 16 дюймов, укажите класс и страну.

Задание: 31 (Serge I: 2002-10-22)

SELECT DISTINCT class, country
FROM classes
WHERE bore >= 16

В предположении, что приход и расход денег на каждом пункте приема фиксируется произвольное число раз (первичным ключом в таблицах является столбец code), требуется получить таблицу, в которой каждому пункту за каждую дату выполнения операций будет соответствовать одна строка.

Задание: 30 (Serge I: 2003-02-14)
 
Вывод: point, date, суммарный расход пункта за день (out), суммарный приход пункта за день (inc). 
Отсутствующие значения считать неопределенными (NULL).
select point, date, SUM(sum_out), SUM(sum_inc)
from( select point, date, SUM(inc) as sum_inc, null as sum_out from Income Group by point, date
Union
select point, date, null as sum_inc, SUM(out) as sum_out from Outcome Group by point, date ) as t
group by point, date order by point

В предположении, что приход и расход денег на каждом пункте приема фиксируется не чаще одного раза в день [т.е. первичный ключ (пункт, дата)], написать запрос с выходными данными (пункт, дата, приход, расход). Использовать таблицы Income_o и Outcome_o.

Задание: 29 (Serge I: 2003-02-14)

SELECT t1.point, t1.date, inc, out
FROM income_o t1 LEFT JOIN outcome_o t2 ON t1.point = t2.point
AND t1.date = t2.date
UNION
SELECT t2.point, t2.date, inc, out
FROM income_o t1 RIGHT JOIN outcome_o t2 ON t1.point = t2.point
AND t1.date = t2.date

Найдите средний размер диска ПК (одно значение для всех) тех производителей, которые выпускают и принтеры.

Задание: 28 (Serge I: 2003-02-03)
Вывести: средний размер HD
SELECT AVG(pc.hd)
FROM pc, product
WHERE product.model = pc.model
AND product.maker IN (SELECT DISTINCT maker
FROM product WHERE product.type = 'printer')

Найдите средний размер диска ПК каждого из тех производителей, которые выпускают и принтеры.

Задание: 27 (Serge I: 2003-02-03)
Вывести: maker, средний размер HD.
SELECT product.maker, AVG(pc.hd)
FROM pc, product WHERE product.model = pc.model
AND product.maker IN ( SELECT DISTINCT maker
FROM product
WHERE product.type = 'printer')
GROUP BY maker